Merge
authorthartmann
Fri, 15 Jan 2016 09:15:33 +0100
changeset 35565 ba5fe4d701e4
parent 35564 3485bf43b924 (diff)
parent 35235 5e373cc222a5 (current diff)
child 35566 034e1bc6f382
Merge
hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotJVMCIRuntime.java
hotspot/src/share/vm/prims/jvm.cpp
jdk/src/java.base/share/classes/jdk/Exported.java
jdk/src/java.base/share/classes/jdk/internal/misc/CleanerImpl.java
jdk/src/java.base/share/classes/sun/misc/CEFormatException.java
jdk/src/java.base/share/classes/sun/misc/CEStreamExhausted.java
jdk/src/java.base/share/classes/sun/misc/JarFilter.java
jdk/src/java.base/share/classes/sun/misc/MessageUtils.java
jdk/src/java.base/share/classes/sun/misc/Perf.java
jdk/src/java.base/share/classes/sun/misc/PerfCounter.java
jdk/src/java.base/share/classes/sun/misc/PerformanceLogger.java
jdk/src/java.base/share/classes/sun/misc/VM.java
jdk/src/java.base/share/classes/sun/misc/VMNotification.java
jdk/src/java.base/share/native/libjava/MessageUtils.c
jdk/src/java.base/unix/classes/sun/misc/OSEnvironment.java
jdk/src/java.base/windows/classes/sun/misc/OSEnvironment.java
jdk/src/java.scripting/share/classes/javax/script/package.html
jdk/test/java/lang/ProcessHandle/TEST.properties
jdk/test/sun/misc/VM/GetNanoTimeAdjustment.java
langtools/test/tools/javac/api/T6430241.java
langtools/test/tools/javac/file/BootClassPathPrepend.java
langtools/test/tools/javac/util/context/T7021650.java
langtools/test/tools/sjavac/ExclPattern.java
nashorn/test/src/jdk/internal/dynalink/beans/test/CallerSensitiveTest.java
--- a/hotspot/.mx.jvmci/mx_jvmci.py	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/.mx.jvmci/mx_jvmci.py	Fri Jan 15 09:15:33 2016 +0100
@@ -153,6 +153,13 @@
     def deploy(self, jdkDir):
         mx.nyi('deploy', self)
 
+    def post_parse_cmd_line(self):
+        self.set_archiveparticipant()
+
+    def set_archiveparticipant(self):
+        dist = self.dist()
+        dist.set_archiveparticipant(JVMCIArchiveParticipant(dist))
+
 class ExtJDKDeployedDist(JvmciJDKDeployedDist):
     def __init__(self, name):
         JvmciJDKDeployedDist.__init__(self, name)
@@ -668,15 +675,10 @@
 
     def __opened__(self, arc, srcArc, services):
         self.services = services
+        self.jvmciServices = services
         self.arc = arc
 
     def __add__(self, arcname, contents):
-        if arcname.startswith('META-INF/jvmci.providers/'):
-            provider = arcname[len('META-INF/jvmci.providers/'):]
-            for service in contents.strip().split(os.linesep):
-                assert service
-                self.services.setdefault(service, []).append(provider)
-            return True
         return False
 
     def __addsrc__(self, arcname, contents):
@@ -864,6 +866,4 @@
     _vm.update(jvmVariant, debugLevel, jvmciMode)
 
     for jdkDist in jdkDeployedDists:
-        dist = jdkDist.dist()
-        if isinstance(jdkDist, JvmciJDKDeployedDist):
-            dist.set_archiveparticipant(JVMCIArchiveParticipant(dist))
+        jdkDist.post_parse_cmd_line()
--- a/hotspot/.mx.jvmci/suite.py	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/.mx.jvmci/suite.py	Fri Jan 15 09:15:33 2016 +0100
@@ -59,28 +59,19 @@
 
     # ------------- JVMCI:Service -------------
 
-    "jdk.vm.ci.service" : {
+    "jdk.vm.ci.services" : {
       "subDir" : "src/jdk.vm.ci/share/classes",
       "sourceDirs" : ["src"],
       "javaCompliance" : "1.8",
       "workingSets" : "API,JVMCI",
     },
 
-    "jdk.vm.ci.service.processor" : {
-      "subDir" : "src/jdk.vm.ci/share/classes",
-      "sourceDirs" : ["src"],
-      "dependencies" : ["jdk.vm.ci.service"],
-      "checkstyle" : "jdk.vm.ci.service",
-      "javaCompliance" : "1.8",
-      "workingSets" : "JVMCI,Codegen,HotSpot",
-    },
-
     # ------------- JVMCI:API -------------
 
     "jdk.vm.ci.common" : {
       "subDir" : "src/jdk.vm.ci/share/classes",
       "sourceDirs" : ["src"],
-      "checkstyle" : "jdk.vm.ci.service",
+      "checkstyle" : "jdk.vm.ci.services",
       "javaCompliance" : "1.8",
       "workingSets" : "API,JVMCI",
     },
@@ -88,7 +79,7 @@
     "jdk.vm.ci.meta" : {
       "subDir" : "src/jdk.vm.ci/share/classes",
       "sourceDirs" : ["src"],
-      "checkstyle" : "jdk.vm.ci.service",
+      "checkstyle" : "jdk.vm.ci.services",
       "javaCompliance" : "1.8",
       "workingSets" : "API,JVMCI",
     },
@@ -97,7 +88,7 @@
       "subDir" : "src/jdk.vm.ci/share/classes",
       "sourceDirs" : ["src"],
       "dependencies" : ["jdk.vm.ci.meta"],
-      "checkstyle" : "jdk.vm.ci.service",
+      "checkstyle" : "jdk.vm.ci.services",
       "javaCompliance" : "1.8",
       "workingSets" : "API,JVMCI",
     },
@@ -108,7 +99,7 @@
       "dependencies" : [
         "jdk.vm.ci.code",
       ],
-      "checkstyle" : "jdk.vm.ci.service",
+      "checkstyle" : "jdk.vm.ci.services",
       "javaCompliance" : "1.8",
       "workingSets" : "API,JVMCI",
     },
@@ -121,7 +112,7 @@
         "jdk.vm.ci.common",
         "jdk.vm.ci.runtime",
       ],
-      "checkstyle" : "jdk.vm.ci.service",
+      "checkstyle" : "jdk.vm.ci.services",
       "javaCompliance" : "1.8",
       "workingSets" : "API,JVMCI",
     },
@@ -129,7 +120,7 @@
     "jdk.vm.ci.inittimer" : {
       "subDir" : "src/jdk.vm.ci/share/classes",
       "sourceDirs" : ["src"],
-      "checkstyle" : "jdk.vm.ci.service",
+      "checkstyle" : "jdk.vm.ci.services",
       "javaCompliance" : "1.8",
       "workingSets" : "JVMCI",
     },
@@ -140,7 +131,7 @@
       "subDir" : "src/jdk.vm.ci/share/classes",
       "sourceDirs" : ["src"],
       "dependencies" : ["jdk.vm.ci.code"],
-      "checkstyle" : "jdk.vm.ci.service",
+      "checkstyle" : "jdk.vm.ci.services",
       "javaCompliance" : "1.8",
       "workingSets" : "JVMCI,AArch64",
     },
@@ -149,7 +140,7 @@
       "subDir" : "src/jdk.vm.ci/share/classes",
       "sourceDirs" : ["src"],
       "dependencies" : ["jdk.vm.ci.code"],
-      "checkstyle" : "jdk.vm.ci.service",
+      "checkstyle" : "jdk.vm.ci.services",
       "javaCompliance" : "1.8",
       "workingSets" : "JVMCI,AMD64",
     },
@@ -158,7 +149,7 @@
       "subDir" : "src/jdk.vm.ci/share/classes",
       "sourceDirs" : ["src"],
       "dependencies" : ["jdk.vm.ci.code"],
-      "checkstyle" : "jdk.vm.ci.service",
+      "checkstyle" : "jdk.vm.ci.services",
       "javaCompliance" : "1.8",
       "workingSets" : "JVMCI,SPARC",
     },
@@ -171,9 +162,9 @@
         "jdk.vm.ci.common",
         "jdk.vm.ci.inittimer",
         "jdk.vm.ci.runtime",
-        "jdk.vm.ci.service",
+        "jdk.vm.ci.services",
       ],
-      "checkstyle" : "jdk.vm.ci.service",
+      "checkstyle" : "jdk.vm.ci.services",
       "javaCompliance" : "1.8",
       "workingSets" : "JVMCI",
     },
@@ -181,7 +172,7 @@
     "jdk.vm.ci.hotspotvmconfig" : {
       "subDir" : "src/jdk.vm.ci/share/classes",
       "sourceDirs" : ["src"],
-      "checkstyle" : "jdk.vm.ci.service",
+      "checkstyle" : "jdk.vm.ci.services",
       "javaCompliance" : "1.8",
       "workingSets" : "JVMCI,HotSpot",
     },
@@ -193,10 +184,7 @@
         "jdk.vm.ci.aarch64",
         "jdk.vm.ci.hotspot",
       ],
-      "checkstyle" : "jdk.vm.ci.service",
-      "annotationProcessors" : [
-        "JVMCI_SERVICE_PROCESSOR",
-      ],
+      "checkstyle" : "jdk.vm.ci.services",
       "javaCompliance" : "1.8",
       "workingSets" : "JVMCI,HotSpot,AArch64",
     },
@@ -208,10 +196,7 @@
         "jdk.vm.ci.amd64",
         "jdk.vm.ci.hotspot",
       ],
-      "checkstyle" : "jdk.vm.ci.service",
-      "annotationProcessors" : [
-        "JVMCI_SERVICE_PROCESSOR",
-      ],
+      "checkstyle" : "jdk.vm.ci.services",
       "javaCompliance" : "1.8",
       "workingSets" : "JVMCI,HotSpot,AMD64",
     },
@@ -223,10 +208,7 @@
         "jdk.vm.ci.sparc",
         "jdk.vm.ci.hotspot",
       ],
-      "checkstyle" : "jdk.vm.ci.service",
-      "annotationProcessors" : [
-        "JVMCI_SERVICE_PROCESSOR",
-      ],
+      "checkstyle" : "jdk.vm.ci.services",
       "javaCompliance" : "1.8",
       "workingSets" : "JVMCI,HotSpot,SPARC",
     },
@@ -241,9 +223,9 @@
 
     # ------------- Distributions -------------
 
-    "JVMCI_SERVICE" : {
+    "JVMCI_SERVICES" : {
       "subDir" : "src/jdk.vm.ci/share/classes",
-      "dependencies" : ["jdk.vm.ci.service"],
+      "dependencies" : ["jdk.vm.ci.services"],
     },
 
     "JVMCI_API" : {
@@ -257,7 +239,7 @@
         "jdk.vm.ci.sparc",
       ],
       "distDependencies" : [
-        "JVMCI_SERVICE",
+        "JVMCI_SERVICES",
       ],
     },
 
@@ -277,7 +259,7 @@
       ],
       "distDependencies" : [
         "JVMCI_HOTSPOTVMCONFIG",
-        "JVMCI_SERVICE",
+        "JVMCI_SERVICES",
         "JVMCI_API",
       ],
     },
@@ -293,28 +275,18 @@
       "exclude" : ["mx:JUNIT"],
     },
 
-
-    "JVMCI_SERVICE_PROCESSOR" : {
-      "subDir" : "src/jdk.vm.ci/share/classes",
-      "dependencies" : ["jdk.vm.ci.service.processor"],
-      "distDependencies" : [
-        "JVMCI_SERVICE",
-      ],
-    },
-
     # This exists to have a monolithic jvmci.jar file which simplifies
     # using the -Xoverride option in JDK9.
     "JVMCI" : {
       "subDir" : "src/jdk.vm.ci/share/classes",
       "overlaps" : [
         "JVMCI_API",
-        "JVMCI_SERVICE",
+        "JVMCI_SERVICES",
         "JVMCI_HOTSPOT",
         "JVMCI_HOTSPOTVMCONFIG",
-        "JVMCI_SERVICE_PROCESSOR",
       ],
       "dependencies" : [
-        "jdk.vm.ci.service",
+        "jdk.vm.ci.services",
         "jdk.vm.ci.inittimer",
         "jdk.vm.ci.runtime",
         "jdk.vm.ci.common",
@@ -325,7 +297,6 @@
         "jdk.vm.ci.hotspot.aarch64",
         "jdk.vm.ci.hotspot.amd64",
         "jdk.vm.ci.hotspot.sparc",
-        "jdk.vm.ci.service.processor"
       ],
     },
   },
--- a/hotspot/make/gensrc/Gensrc-jdk.vm.ci.gmk	Thu Jan 14 20:57:31 2016 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,105 +0,0 @@
-#
-# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.  Oracle designates this
-# particular file as subject to the "Classpath" exception as provided
-# by Oracle in the LICENSE file that accompanied this code.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-default: all
-
-include $(SPEC)
-include MakeBase.gmk
-include JavaCompilation.gmk
-include SetupJavaCompilers.gmk
-
-GENSRC_DIR := $(SUPPORT_OUTPUTDIR)/gensrc/jdk.vm.ci
-SRC_DIR := $(HOTSPOT_TOPDIR)/src/jdk.vm.ci/share/classes
-
-################################################################################
-# Compile the annotation processor
-
-$(eval $(call SetupJavaCompilation, BUILD_JVMCI_SERVICE, \
-    SETUP := GENERATE_OLDBYTECODE, \
-    SRC := $(SRC_DIR)/jdk.vm.ci.service/src \
-        $(SRC_DIR)/jdk.vm.ci.service.processor/src, \
-    BIN := $(BUILDTOOLS_OUTPUTDIR)/jvmci_service, \
-    JAR := $(BUILDTOOLS_OUTPUTDIR)/jdk.vm.ci.service.jar, \
-))
-
-################################################################################
-
-PROC_SRC_SUBDIRS := \
-    jdk.vm.ci.hotspot \
-    jdk.vm.ci.hotspot.aarch64 \
-    jdk.vm.ci.hotspot.amd64 \
-    jdk.vm.ci.hotspot.sparc \
-    jdk.vm.ci.runtime \
-    #
-
-PROC_SRC_DIRS := $(patsubst %, $(SRC_DIR)/%/src, $(PROC_SRC_SUBDIRS))
-
-PROC_SRCS := $(filter %.java, $(call CacheFind, $(PROC_SRC_DIRS)))
-
-ALL_SRC_DIRS := $(wildcard $(SRC_DIR)/*/src)
-SOURCEPATH := $(call PathList, $(ALL_SRC_DIRS))
-PROCESSOR_PATH := $(call PathList, \
-    $(BUILDTOOLS_OUTPUTDIR)/jdk.vm.ci.service.jar)
-
-$(GENSRC_DIR)/_gensrc_proc_done: $(PROC_SRCS) \
-    $(BUILD_JVMCI_SERVICE)
-	$(MKDIR) -p $(@D)
-	$(eval $(call ListPathsSafely,PROC_SRCS,$(@D)/_gensrc_proc_files))
-	$(JAVA_SMALL) $(NEW_JAVAC) \
-	    -XDignore.symbol.file \
-            -bootclasspath $(JDK_OUTPUTDIR)/modules/java.base \
-	    -sourcepath $(SOURCEPATH) \
-	    -implicit:none \
-	    -proc:only \
-	    -processorpath $(PROCESSOR_PATH) \
-	    -d $(GENSRC_DIR) \
-	    -s $(GENSRC_DIR) \
-	    @$(@D)/_gensrc_proc_files
-	$(TOUCH) $@
-
-TARGETS += $(GENSRC_DIR)/_gensrc_proc_done
-
-################################################################################
-
-$(GENSRC_DIR)/_providers_converted: $(GENSRC_DIR)/_gensrc_proc_done
-	$(MKDIR) -p $(GENSRC_DIR)/META-INF/services
-	($(CD) $(GENSRC_DIR)/META-INF/jvmci.providers && \
-	    for i in $$($(LS)); do \
-	      c=$$($(CAT) $$i | $(TR) -d '\n\r'); \
-	      $(ECHO) $$i >> $(GENSRC_DIR)/META-INF/services/$$c.tmp; \
-	    done)
-	($(CD) $(GENSRC_DIR)/META-INF/services && \
-	    for i in $$($(LS) *.tmp); do \
-	      $(MV) $$i $${i%.tmp}; \
-	    done)
-	$(TOUCH) $@
-
-TARGETS += $(GENSRC_DIR)/_providers_converted
-
-################################################################################
-
-all: $(TARGETS)
-
-.PHONY: default all
--- a/hotspot/make/share/makefiles/mapfile-vers	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/make/share/makefiles/mapfile-vers	Fri Jan 15 09:15:33 2016 +0100
@@ -13,6 +13,7 @@
                 JVM_Clone;
                 JVM_ConstantPoolGetClassAt;
                 JVM_ConstantPoolGetClassAtIfLoaded;
+                JVM_ConstantPoolGetClassRefIndexAt;
                 JVM_ConstantPoolGetDoubleAt;
                 JVM_ConstantPoolGetFieldAt;
                 JVM_ConstantPoolGetFieldAtIfLoaded;
@@ -22,8 +23,11 @@
                 JVM_ConstantPoolGetMethodAt;
                 JVM_ConstantPoolGetMethodAtIfLoaded;
                 JVM_ConstantPoolGetMemberRefInfoAt;
+                JVM_ConstantPoolGetNameAndTypeRefInfoAt;
+                JVM_ConstantPoolGetNameAndTypeRefIndexAt;
                 JVM_ConstantPoolGetSize;
                 JVM_ConstantPoolGetStringAt;
+                JVM_ConstantPoolGetTagAt;
                 JVM_ConstantPoolGetUTF8At;
                 JVM_CountStackFrames;
                 JVM_CurrentClassLoader;
--- a/hotspot/src/cpu/aarch64/vm/c1_CodeStubs_aarch64.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/cpu/aarch64/vm/c1_CodeStubs_aarch64.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -256,6 +256,7 @@
 
 void DeoptimizeStub::emit_code(LIR_Assembler* ce) {
   __ bind(_entry);
+  ce->store_parameter(_trap_request, 0);
   __ far_call(RuntimeAddress(Runtime1::entry_for(Runtime1::deoptimize_id)));
   ce->add_call_info_here(_info);
   DEBUG_ONLY(__ should_not_reach_here());
--- a/hotspot/src/cpu/aarch64/vm/c1_Runtime1_aarch64.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/cpu/aarch64/vm/c1_Runtime1_aarch64.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -1066,7 +1066,9 @@
       {
         StubFrame f(sasm, "deoptimize", dont_gc_arguments);
         OopMap* oop_map = save_live_registers(sasm);
-        int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, deoptimize));
+        f.load_argument(0, c_rarg1);
+        int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, deoptimize), c_rarg1);
+
         oop_maps = new OopMapSet();
         oop_maps->add_gc_map(call_offset, oop_map);
         restore_live_registers(sasm);
--- a/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -3938,7 +3938,7 @@
   // was post-decremented.)  Skip this address by starting at i=1, and
   // touch a few more pages below.  N.B.  It is important to touch all
   // the way down to and including i=StackShadowPages.
-  for (int i = 0; i < (JavaThread::stack_shadow_zone_size() / os::vm_page_size()) - 1; i++) {
+  for (int i = 0; i < (int)(JavaThread::stack_shadow_zone_size() / os::vm_page_size()) - 1; i++) {
     // this could be any sized move but this is can be a debugging crumb
     // so the bigger the better.
     lea(tmp, Address(tmp, -os::vm_page_size()));
--- a/hotspot/src/cpu/aarch64/vm/relocInfo_aarch64.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/cpu/aarch64/vm/relocInfo_aarch64.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -87,7 +87,6 @@
       return;
     }
   }
-  assert(addr() != x, "call instruction in an infinite loop");
   MacroAssembler::pd_patch_instruction(addr(), x);
   assert(pd_call_destination(addr()) == x, "fail in reloc");
 }
--- a/hotspot/src/cpu/aarch64/vm/templateInterpreterGenerator_aarch64.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/cpu/aarch64/vm/templateInterpreterGenerator_aarch64.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -716,7 +716,7 @@
 
   // If G1 is not enabled then attempt to go through the accessor entry point
   // Reference.get is an accessor
-  return generate_accessor_entry();
+  return NULL;
 }
 
 /**
@@ -842,7 +842,7 @@
   // an interpreter frame with greater than a page of locals, so each page
   // needs to be checked.  Only true for non-native.
   if (UseStackBanging) {
-    const int size_t n_shadow_pages = JavaThread::stack_shadow_zone_size() / os::vm_page_size();
+    const int n_shadow_pages = JavaThread::stack_shadow_zone_size() / os::vm_page_size();
     const int start_page = native_call ? n_shadow_pages : 1;
     const int page_size = os::vm_page_size();
     for (int pages = start_page; pages <= n_shadow_pages ; pages++) {
@@ -1184,8 +1184,8 @@
   {
     Label no_reguard;
     __ lea(rscratch1, Address(rthread, in_bytes(JavaThread::stack_guard_state_offset())));
-    __ ldrb(rscratch1, Address(rscratch1));
-    __ cmp(rscratch1, JavaThread::stack_guard_yellow_disabled);
+    __ ldrw(rscratch1, Address(rscratch1));
+    __ cmp(rscratch1, JavaThread::stack_guard_yellow_reserved_disabled);
     __ br(Assembler::NE, no_reguard);
 
     __ pusha(); // XXX only save smashed registers
--- a/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
- * Copyright 2012, 2015 SAP AG. All rights reserved.
+ * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright 2012, 2016 SAP AG. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -3652,9 +3652,9 @@
   assert_different_registers(table, tc0, tc1, tc2);
   assert(table == tc3, "must be!");
 
-  if (ix0 != 0) addi(tc0, table, ix0);
-  if (ix1 != 0) addi(tc1, table, ix1);
-  if (ix2 != 0) addi(tc2, table, ix2);
+  addi(tc0, table, ix0);
+  addi(tc1, table, ix1);
+  addi(tc2, table, ix2);
   if (ix3 != 0) addi(tc3, table, ix3);
 
   return ix3;
@@ -3720,14 +3720,14 @@
   const int mainLoop_alignment = loopAlignment ? 32 : 4; // (InputForNewCode > 4 ? InputForNewCode : 32) : 4;
 
   // Process all bytes in a single-byte loop.
-  cmpdi(CCR0, len, 0);                           // Anything to do?
-  mtctr(len);
+  clrldi_(len, len, 32);                         // Enforce 32 bit. Anything to do?
   beq(CCR0, L_done);
 
   if (invertCRC) {
     nand(crc, crc, crc);                         // ~c
   }
 
+  mtctr(len);
   align(mainLoop_alignment);
   BIND(L_mainLoop);
     lbz(data, 0, buf);                           // Byte from buffer, zero-extended.
@@ -3943,7 +3943,7 @@
 #else
   Register crc_rv = tmp;                         // Load_reverse needs separate registers to work on.
                                                  // Occupies tmp, but frees up crc.
-  load_reverse_32(crc_rv, crc);                  // evert byte order because we are dealing with big-endian data.
+  load_reverse_32(crc_rv, crc);                  // Revert byte order because we are dealing with big-endian data.
   tmp = crc;
 #endif
 
--- a/hotspot/src/cpu/ppc/vm/register_ppc.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/cpu/ppc/vm/register_ppc.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -609,13 +609,11 @@
 REGISTER_DECLARATION(Register, R27_tmp7, R27);
 REGISTER_DECLARATION(Register, R28_tmp8, R28);
 REGISTER_DECLARATION(Register, R29_tmp9, R29);
-#ifndef CC_INTERP
 REGISTER_DECLARATION(Register, R24_dispatch_addr,     R24);
 REGISTER_DECLARATION(Register, R25_templateTableBase, R25);
 REGISTER_DECLARATION(Register, R26_monitor,           R26);
 REGISTER_DECLARATION(Register, R27_constPoolCache,    R27);
 REGISTER_DECLARATION(Register, R28_mdx,               R28);
-#endif // CC_INTERP
 
 REGISTER_DECLARATION(Register, R19_inline_cache_reg, R19);
 REGISTER_DECLARATION(Register, R29_TOC, R29);
@@ -638,12 +636,9 @@
 #define R26_monitor           AS_REGISTER(Register, R26)
 #define R27_constPoolCache    AS_REGISTER(Register, R27)
 #define R28_mdx               AS_REGISTER(Register, R28)
-#endif
 
 #define R19_inline_cache_reg AS_REGISTER(Register, R19)
 #define R29_TOC AS_REGISTER(Register, R29)
-
-#define CCR4_is_synced AS_REGISTER(ConditionRegister, CCR4)
 #endif
 
 // Scratch registers are volatile.
--- a/hotspot/src/cpu/ppc/vm/sharedRuntime_ppc.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/cpu/ppc/vm/sharedRuntime_ppc.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012, 2015 SAP SE. All rights reserved.
+ * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2016 SAP SE. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -3400,9 +3400,9 @@
 void SharedRuntime::montgomery_multiply(jint *a_ints, jint *b_ints, jint *n_ints,
                                         jint len, jlong inv,
                                         jint *m_ints) {
+  len = len & 0x7fffFFFF; // C2 does not respect int to long conversion for stub calls.
   assert(len % 2 == 0, "array length in montgomery_multiply must be even");
   int longwords = len/2;
-  assert(longwords > 0, "unsupported");
 
   // Make very sure we don't use so much space that the stack might
   // overflow. 512 jints corresponds to an 16384-bit integer and
@@ -3430,9 +3430,9 @@
 void SharedRuntime::montgomery_square(jint *a_ints, jint *n_ints,
                                       jint len, jlong inv,
                                       jint *m_ints) {
+  len = len & 0x7fffFFFF; // C2 does not respect int to long conversion for stub calls.
   assert(len % 2 == 0, "array length in montgomery_square must be even");
   int longwords = len/2;
-  assert(longwords > 0, "unsupported");
 
   // Make very sure we don't use so much space that the stack might
   // overflow. 512 jints corresponds to an 16384-bit integer and
--- a/hotspot/src/cpu/ppc/vm/stubGenerator_ppc.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/cpu/ppc/vm/stubGenerator_ppc.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
- * Copyright 2012, 2015 SAP AG. All rights reserved.
+ * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright 2012, 2016 SAP AG. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -1070,6 +1070,12 @@
     return start;
   }
 
+  inline void assert_positive_int(Register count) {
+#ifdef ASSERT
+    __ srdi_(R0, count, 31);
+    __ asm_assert_eq("missing zero extend", 0xAFFE);
+#endif
+  }
 
   // Generate overlap test for array copy stubs.
   //
@@ -1082,10 +1088,7 @@
     Register tmp1 = R6_ARG4;
     Register tmp2 = R7_ARG5;
 
-#ifdef ASSERT
-    __ srdi_(tmp2, R5_ARG3, 31);
-    __ asm_assert_eq("missing zero extend", 0xAFFE);
-#endif
+    assert_positive_int(R5_ARG3);
 
     __ subf(tmp1, R3_ARG1, R4_ARG2); // distance in bytes
     __ sldi(tmp2, R5_ARG3, log2_elem_size); // size in bytes
@@ -1125,14 +1128,15 @@
   address generate_disjoint_byte_copy(bool aligned, const char * name) {
     StubCodeMark mark(this, "StubRoutines", name);
     address start = __ function_entry();
+    assert_positive_int(R5_ARG3);
 
     Register tmp1 = R6_ARG4;
     Register tmp2 = R7_ARG5;
     Register tmp3 = R8_ARG6;
     Register tmp4 = R9_ARG7;
 
-
     Label l_1, l_2, l_3, l_4, l_5, l_6, l_7, l_8, l_9;
+
     // Don't try anything fancy if arrays don't have many elements.
     __ li(tmp3, 0);
     __ cmpwi(CCR0, R5_ARG3, 17);
@@ -1257,6 +1261,7 @@
   address generate_conjoint_byte_copy(bool aligned, const char * name) {
     StubCodeMark mark(this, "StubRoutines", name);
     address start = __ function_entry();
+    assert_positive_int(R5_ARG3);
 
     Register tmp1 = R6_ARG4;
     Register tmp2 = R7_ARG5;
@@ -1349,8 +1354,10 @@
     Register tmp4 = R9_ARG7;
 
     address start = __ function_entry();
+    assert_positive_int(R5_ARG3);
 
       Label l_1, l_2, l_3, l_4, l_5, l_6, l_7, l_8;
+
     // don't try anything fancy if arrays don't have many elements
     __ li(tmp3, 0);
     __ cmpwi(CCR0, R5_ARG3, 9);
@@ -1479,6 +1486,7 @@
   address generate_conjoint_short_copy(bool aligned, const char * name) {
     StubCodeMark mark(this, "StubRoutines", name);
     address start = __ function_entry();
+    assert_positive_int(R5_ARG3);
 
     Register tmp1 = R6_ARG4;
     Register tmp2 = R7_ARG5;
@@ -1521,6 +1529,7 @@
     Register tmp4 = R0;
 
     Label l_1, l_2, l_3, l_4, l_5, l_6;
+
     // for short arrays, just do single element copy
     __ li(tmp3, 0);
     __ cmpwi(CCR0, R5_ARG3, 5);
@@ -1603,6 +1612,7 @@
   address generate_disjoint_int_copy(bool aligned, const char * name) {
     StubCodeMark mark(this, "StubRoutines", name);
     address start = __ function_entry();
+    assert_positive_int(R5_ARG3);
     generate_disjoint_int_copy_core(aligned);
     __ li(R3_RET, 0); // return 0
     __ blr();
@@ -1688,7 +1698,7 @@
   address generate_conjoint_int_copy(bool aligned, const char * name) {
     StubCodeMark mark(this, "StubRoutines", name);
     address start = __ function_entry();
-
+    assert_positive_int(R5_ARG3);
     address nooverlap_target = aligned ?
       STUB_ENTRY(arrayof_jint_disjoint_arraycopy) :
       STUB_ENTRY(jint_disjoint_arraycopy);
@@ -1775,6 +1785,7 @@
   address generate_disjoint_long_copy(bool aligned, const char * name) {
     StubCodeMark mark(this, "StubRoutines", name);
     address start = __ function_entry();
+    assert_positive_int(R5_ARG3);
     generate_disjoint_long_copy_core(aligned);
     __ li(R3_RET, 0); // return 0
     __ blr();
@@ -1858,7 +1869,7 @@
   address generate_conjoint_long_copy(bool aligned, const char * name) {
     StubCodeMark mark(this, "StubRoutines", name);
     address start = __ function_entry();
-
+    assert_positive_int(R5_ARG3);
     address nooverlap_target = aligned ?
       STUB_ENTRY(arrayof_jlong_disjoint_arraycopy) :
       STUB_ENTRY(jlong_disjoint_arraycopy);
@@ -1885,7 +1896,7 @@
     StubCodeMark mark(this, "StubRoutines", name);
 
     address start = __ function_entry();
-
+    assert_positive_int(R5_ARG3);
     address nooverlap_target = aligned ?
       STUB_ENTRY(arrayof_oop_disjoint_arraycopy) :
       STUB_ENTRY(oop_disjoint_arraycopy);
@@ -1922,7 +1933,7 @@
   address generate_disjoint_oop_copy(bool aligned, const char * name, bool dest_uninitialized) {
     StubCodeMark mark(this, "StubRoutines", name);
     address start = __ function_entry();
-
+    assert_positive_int(R5_ARG3);
     gen_write_ref_array_pre_barrier(R3_ARG1, R4_ARG2, R5_ARG3, dest_uninitialized, R9_ARG7);
 
     // save some arguments, disjoint_long_copy_core destroys them.
@@ -1996,7 +2007,24 @@
     StubCodeMark mark(this, "StubRoutines", name);
     address start = __ function_entry();
 
-    // TODO: Assert that int is 64 bit sign extended and arrays are not conjoint.
+    // Assert that int is 64 bit sign extended and arrays are not conjoint.
+#ifdef ASSERT
+    {
+    assert_positive_int(R5_ARG3);
+    const Register tmp1 = R11_scratch1, tmp2 = R12_scratch2;
+    Label no_overlap;
+    __ subf(tmp1, R3_ARG1, R4_ARG2); // distance in bytes
+    __ sldi(tmp2, R5_ARG3, LogBytesPerHeapOop); // size in bytes
+    __ cmpld(CCR0, R3_ARG1, R4_ARG2); // Use unsigned comparison!
+    __ cmpld(CCR1, tmp1, tmp2);
+    __ crnand(CCR0, Assembler::less, CCR1, Assembler::less);
+    // Overlaps if Src before dst and distance smaller than size.
+    // Branch to forward copy routine otherwise.
+    __ blt(CCR0, no_overlap);
+    __ stop("overlap in checkcast_copy", 0x9543);
+    __ bind(no_overlap);
+    }
+#endif
 
     gen_write_ref_array_pre_barrier(R3_from, R4_to, R5_count, dest_uninitialized, R12_tmp, /* preserve: */ R6_ckoff, R7_ckval);
 
@@ -2445,12 +2473,14 @@
                                                              STUB_ENTRY(checkcast_arraycopy));
 
     // fill routines
-    StubRoutines::_jbyte_fill          = generate_fill(T_BYTE,  false, "jbyte_fill");
-    StubRoutines::_jshort_fill         = generate_fill(T_SHORT, false, "jshort_fill");
-    StubRoutines::_jint_fill           = generate_fill(T_INT,   false, "jint_fill");
-    StubRoutines::_arrayof_jbyte_fill  = generate_fill(T_BYTE,  true, "arrayof_jbyte_fill");
-    StubRoutines::_arrayof_jshort_fill = generate_fill(T_SHORT, true, "arrayof_jshort_fill");
-    StubRoutines::_arrayof_jint_fill   = generate_fill(T_INT,   true, "arrayof_jint_fill");
+    if (OptimizeFill) {
+      StubRoutines::_jbyte_fill          = generate_fill(T_BYTE,  false, "jbyte_fill");
+      StubRoutines::_jshort_fill         = generate_fill(T_SHORT, false, "jshort_fill");
+      StubRoutines::_jint_fill           = generate_fill(T_INT,   false, "jint_fill");
+      StubRoutines::_arrayof_jbyte_fill  = generate_fill(T_BYTE,  true, "arrayof_jbyte_fill");
+      StubRoutines::_arrayof_jshort_fill = generate_fill(T_SHORT, true, "arrayof_jshort_fill");
+      StubRoutines::_arrayof_jint_fill   = generate_fill(T_INT,   true, "arrayof_jint_fill");
+    }
   }
 
   // Safefetch stubs.
@@ -2535,6 +2565,11 @@
 
     BLOCK_COMMENT("Entry:");
 
+    // C2 does not respect int to long conversion for stub calls.
+    __ clrldi(xlen, xlen, 32);
+    __ clrldi(ylen, ylen, 32);
+    __ clrldi(zlen, zlen, 32);
+
     // Save non-volatile regs (frameless).
     int current_offs = 8;
     __ std(R24, -current_offs, R1_SP); current_offs += 8;
--- a/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -1805,9 +1805,7 @@
 
 void LIR_Assembler::intrinsic_op(LIR_Code code, LIR_Opr value, LIR_Opr thread, LIR_Opr dest, LIR_Op* op) {
   switch (code) {
-    case lir_sin:
-    case lir_tan:
-    case lir_cos: {
+    case lir_tan: {
       assert(thread->is_valid(), "preserve the thread object for performance reasons");
       assert(dest->as_double_reg() == F0, "the result will be in f0/f1");
       break;
--- a/hotspot/src/cpu/sparc/vm/c1_MacroAssembler_sparc.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/cpu/sparc/vm/c1_MacroAssembler_sparc.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -205,12 +205,7 @@
 
 
 void C1_MacroAssembler::initialize_body(Register base, Register index) {
-  assert_different_registers(base, index);
-  Label loop;
-  bind(loop);
-  subcc(index, HeapWordSize, index);
-  brx(Assembler::greaterEqual, true, Assembler::pt, loop);
-  delayed()->st_ptr(G0, base, index);
+  zero_memory(base, index);
 }
 
 
@@ -237,7 +232,7 @@
   }
   try_allocate(obj, noreg, obj_size * wordSize, t2, t3, slow_case);
 
-  initialize_object(obj, klass, noreg, obj_size * HeapWordSize, t1, t2);
+  initialize_object(obj, klass, noreg, obj_size * HeapWordSize, t1, t2, /* is_tlab_allocated */ UseTLAB);
 }
 
 void C1_MacroAssembler::initialize_object(
@@ -246,7 +241,8 @@
   Register var_size_in_bytes,          // object size in bytes if unknown at compile time; invalid otherwise
   int      con_size_in_bytes,          // object size in bytes if   known at compile time
   Register t1,                         // temp register
-  Register t2                          // temp register
+  Register t2,                         // temp register
+  bool     is_tlab_allocated           // the object was allocated in a TLAB; relevant for the implementation of ZeroTLAB
   ) {
   const int hdr_size_in_bytes = instanceOopDesc::header_size() * HeapWordSize;
 
@@ -269,31 +265,33 @@
 
 #endif
 
-  // initialize body
-  const int threshold = 5 * HeapWordSize;              // approximate break even point for code size
-  if (var_size_in_bytes != noreg) {
-    // use a loop
-    add(obj, hdr_size_in_bytes, t1);               // compute address of first element
-    sub(var_size_in_bytes, hdr_size_in_bytes, t2); // compute size of body
-    initialize_body(t1, t2);
+  if (!(UseTLAB && ZeroTLAB && is_tlab_allocated)) {
+    // initialize body
+    const int threshold = 5 * HeapWordSize;              // approximate break even point for code size
+    if (var_size_in_bytes != noreg) {
+      // use a loop
+      add(obj, hdr_size_in_bytes, t1);               // compute address of first element
+      sub(var_size_in_bytes, hdr_size_in_bytes, t2); // compute size of body
+      initialize_body(t1, t2);
 #ifndef _LP64
-  } else if (con_size_in_bytes < threshold * 2) {
-    // on v9 we can do double word stores to fill twice as much space.
-    assert(hdr_size_in_bytes % 8 == 0, "double word aligned");
-    assert(con_size_in_bytes % 8 == 0, "double word aligned");
-    for (int i = hdr_size_in_bytes; i < con_size_in_bytes; i += 2 * HeapWordSize) stx(G0, obj, i);
+    } else if (con_size_in_bytes < threshold * 2) {
+      // on v9 we can do double word stores to fill twice as much space.
+      assert(hdr_size_in_bytes % 8 == 0, "double word aligned");
+      assert(con_size_in_bytes % 8 == 0, "double word aligned");
+      for (int i = hdr_size_in_bytes; i < con_size_in_bytes; i += 2 * HeapWordSize) stx(G0, obj, i);
 #endif
-  } else if (con_size_in_bytes <= threshold) {
-    // use explicit NULL stores
-    for (int i = hdr_size_in_bytes; i < con_size_in_bytes; i += HeapWordSize)     st_ptr(G0, obj, i);
-  } else if (con_size_in_bytes > hdr_size_in_bytes) {
-    // use a loop
-    const Register base  = t1;
-    const Register index = t2;
-    add(obj, hdr_size_in_bytes, base);               // compute address of first element
-    // compute index = number of words to clear
-    set(con_size_in_bytes - hdr_size_in_bytes, index);
-    initialize_body(base, index);
+    } else if (con_size_in_bytes <= threshold) {
+      // use explicit NULL stores
+      for (int i = hdr_size_in_bytes; i < con_size_in_bytes; i += HeapWordSize)     st_ptr(G0, obj, i);
+    } else if (con_size_in_bytes > hdr_size_in_bytes) {
+      // use a loop
+      const Register base  = t1;
+      const Register index = t2;
+      add(obj, hdr_size_in_bytes, base);               // compute address of first element
+      // compute index = number of words to clear
+      set(con_size_in_bytes - hdr_size_in_bytes, index);
+      initialize_body(base, index);
+    }
   }
 
   if (CURRENT_ENV->dtrace_alloc_probes()) {
--- a/hotspot/src/cpu/sparc/vm/c1_MacroAssembler_sparc.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/cpu/sparc/vm/c1_MacroAssembler_sparc.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -50,7 +50,8 @@
     Register var_size_in_bytes,        // object size in bytes if unknown at compile time; invalid otherwise
     int      con_size_in_bytes,        // object size in bytes if   known at compile time
     Register t1,                       // temp register
-    Register t2                        // temp register
+    Register t2,                       // temp register
+    bool is_tlab_allocated             // the object was allocated in a TLAB; relevant for the implementation of ZeroTLAB
   );
 
   // allocation of fixed-size objects
--- a/hotspot/src/cpu/sparc/vm/c1_Runtime1_sparc.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/cpu/sparc/vm/c1_Runtime1_sparc.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -435,7 +435,7 @@
 
           __ tlab_allocate(O0_obj, G1_obj_size, 0, G3_t1, slow_path);
 
-          __ initialize_object(O0_obj, G5_klass, G1_obj_size, 0, G3_t1, G4_t2);
+          __ initialize_object(O0_obj, G5_klass, G1_obj_size, 0, G3_t1, G4_t2, /* is_tlab_allocated */ true);
           __ verify_oop(O0_obj);
           __ mov(O0, I0);
           __ ret();
@@ -447,7 +447,7 @@
           __ eden_allocate(O0_obj, G1_obj_size, 0, G3_t1, G4_t2, slow_path);
           __ incr_allocated_bytes(G1_obj_size, G3_t1, G4_t2);
 
-          __ initialize_object(O0_obj, G5_klass, G1_obj_size, 0, G3_t1, G4_t2);
+          __ initialize_object(O0_obj, G5_klass, G1_obj_size, 0, G3_t1, G4_t2, /* is_tlab_allocated */ false);
           __ verify_oop(O0_obj);
           __ mov(O0, I0);
           __ ret();
@@ -542,7 +542,9 @@
           __ ldub(klass_lh, G3_t1, klass_lh_header_size_offset);
           __ sub(G1_arr_size, G3_t1, O1_t2);  // body length
           __ add(O0_obj, G3_t1, G3_t1);       // body start
-          __ initialize_body(G3_t1, O1_t2);
+          if (!ZeroTLAB) {
+            __ initialize_body(G3_t1, O1_t2);
+          }
           __ verify_oop(O0_obj);
           __ retl();
           __ delayed()->nop();
--- a/hotspot/src/cpu/sparc/vm/macroAssembler_sparc.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/cpu/sparc/vm/macroAssembler_sparc.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -3459,11 +3459,27 @@
   add(top, t1, top); // t1 is tlab_size
   sub(top, ThreadLocalAllocBuffer::alignment_reserve_in_bytes(), top);
   st_ptr(top, G2_thread, in_bytes(JavaThread::tlab_end_offset()));
+
+  if (ZeroTLAB) {
+    // This is a fast TLAB refill, therefore the GC is not notified of it.
+    // So compiled code must fill the new TLAB with zeroes.
+    ld_ptr(G2_thread, in_bytes(JavaThread::tlab_start_offset()), t2);
+    zero_memory(t2, t1);
+  }
   verify_tlab();
   ba(retry);
   delayed()->nop();
 }
 
+void MacroAssembler::zero_memory(Register base, Register index) {
+  assert_different_registers(base, index);
+  Label loop;
+  bind(loop);
+  subcc(index, HeapWordSize, index);
+  brx(Assembler::greaterEqual, true, Assembler::pt, loop);
+  delayed()->st_ptr(G0, base, index);
+}
+
 void MacroAssembler::incr_allocated_bytes(RegisterOrConstant size_in_bytes,
                                           Register t1, Register t2) {
   // Bump total bytes allocated by this thread
--- a/hotspot/src/cpu/sparc/vm/macroAssembler_sparc.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/cpu/sparc/vm/macroAssembler_sparc.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -1278,6 +1278,7 @@
     Label&   slow_case                 // continuation point if fast allocation fails
   );
   void tlab_refill(Label& retry_tlab, Label& try_eden, Label& slow_case);
+  void zero_memory(Register base, Register index);
   void incr_allocated_bytes(RegisterOrConstant size_in_bytes,
                             Register t1, Register t2);
 
--- a/hotspot/src/cpu/x86/vm/assembler_x86.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/cpu/x86/vm/assembler_x86.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -1891,6 +1891,12 @@
   emit_int8((unsigned char)(0xF0 | encode));
 }
 
+void Assembler::imull(Register src) {
+  int encode = prefix_and_encode(src->encoding());
+  emit_int8((unsigned char)0xF7);
+  emit_int8((unsigned char)(0xE8 | encode));
+}
+
 void Assembler::imull(Register dst, Register src) {
   int encode = prefix_and_encode(dst->encoding(), src->encoding());
   emit_int8(0x0F);
@@ -4112,6 +4118,14 @@
   emit_arith_b(0xF6, 0xC0, dst, imm8);
 }
 
+void Assembler::testb(Address dst, int imm8) {
+  InstructionMark im(this);
+  prefix(dst);
+  emit_int8((unsigned char)0xF6);
+  emit_operand(rax, dst, 1);
+  emit_int8(imm8);
+}
+
 void Assembler::testl(Register dst, int32_t imm32) {
   // not using emit_arith because test
   // doesn't support sign-extension of
--- a/hotspot/src/cpu/x86/vm/assembler_x86.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/cpu/x86/vm/assembler_x86.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -1205,6 +1205,7 @@
   void idivq(Register src);
 #endif
 
+  void imull(Register src);
   void imull(Register dst, Register src);
   void imull(Register dst, Register src, int value);
   void imull(Register dst, Address src);
@@ -1727,6 +1728,7 @@
   void subss(XMMRegister dst, XMMRegister src);
 
   void testb(Register dst, int imm8);
+  void testb(Address dst, int imm8);
 
   void testl(Register dst, int32_t imm32);
   void testl(Register dst, Register src);
--- a/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -2368,15 +2368,6 @@
       case lir_log10 : __ flog10() ; break;
       case lir_abs   : __ fabs() ; break;
       case lir_sqrt  : __ fsqrt(); break;
-      case lir_sin   :
-        // Should consider not saving rbx, if not necessary
-        __ trigfunc('s', op->as_Op2()->fpu_stack_size());
-        break;
-      case lir_cos :
-        // Should consider not saving rbx, if not necessary
-        assert(op->as_Op2()->fpu_stack_size() <= 6, "sin and cos need two free stack slots");
-        __ trigfunc('c', op->as_Op2()->fpu_stack_size());
-        break;
       case lir_tan :
         // Should consider not saving rbx, if not necessary
         __ trigfunc('t', op->as_Op2()->fpu_stack_size());
--- a/hotspot/src/cpu/x86/vm/c1_LIRGenerator_x86.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/cpu/x86/vm/c1_LIRGenerator_x86.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -811,7 +811,8 @@
   assert(x->number_of_arguments() == 1 || (x->number_of_arguments() == 2 && x->id() == vmIntrinsics::_dpow), "wrong type");
 
   if (x->id() == vmIntrinsics::_dexp || x->id() == vmIntrinsics::_dlog ||
-      x->id() == vmIntrinsics::_dpow) {
+      x->id() == vmIntrinsics::_dpow || x->id() == vmIntrinsics::_dcos ||
+      x->id() == vmIntrinsics::_dsin) {
     do_LibmIntrinsic(x);
     return;
   }
@@ -821,11 +822,10 @@
   bool use_fpu = false;
   if (UseSSE >= 2) {
     switch(x->id()) {
-      case vmIntrinsics::_dsin:
-      case vmIntrinsics::_dcos:
       case vmIntrinsics::_dtan:
       case vmIntrinsics::_dlog10:
         use_fpu = true;
+        break;
     }
   } else {
     value.set_destroys_register();
@@ -870,8 +870,6 @@
   switch(x->id()) {
     case vmIntrinsics::_dabs:   __ abs  (calc_input, calc_result, LIR_OprFact::illegalOpr); break;
     case vmIntrinsics::_dsqrt:  __ sqrt (calc_input, calc_result, LIR_OprFact::illegalOpr); break;
-    case vmIntrinsics::_dsin:   __ sin  (calc_input, calc_result, tmp1, tmp2);              break;
-    case vmIntrinsics::_dcos:   __ cos  (calc_input, calc_result, tmp1, tmp2);              break;
     case vmIntrinsics::_dtan:   __ tan  (calc_input, calc_result, tmp1, tmp2);              break;
     case vmIntrinsics::_dlog10: __ log10(calc_input, calc_result, tmp1);                    break;
     default:                    ShouldNotReachHere();
@@ -923,17 +921,29 @@
     case vmIntrinsics::_dlog:
       if (VM_Version::supports_sse2()) {
         __ call_runtime_leaf(StubRoutines::dlog(), getThreadTemp(), result_reg, cc->args());
-      }
-      else {
+      } else {
         __ call_runtime_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::dlog), getThreadTemp(), result_reg, cc->args());
       }
       break;
     case vmIntrinsics::_dpow:
       if (VM_Version::supports_sse2()) {
         __ call_runtime_leaf(StubRoutines::dpow(), getThreadTemp(), result_reg, cc->args());
+      } else {
+        __ call_runtime_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::dpow), getThreadTemp(), result_reg, cc->args());
       }
-      else {
-        __ call_runtime_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::dpow), getThreadTemp(), result_reg, cc->args());
+      break;
+    case vmIntrinsics::_dsin:
+      if (VM_Version::supports_sse2() && StubRoutines::dsin() != NULL) {
+        __ call_runtime_leaf(StubRoutines::dsin(), getThreadTemp(), result_reg, cc->args());
+      } else {
+        __ call_runtime_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::dsin), getThreadTemp(), result_reg, cc->args());
+      }
+      break;
+    case vmIntrinsics::_dcos:
+      if (VM_Version::supports_sse2() && StubRoutines::dcos() != NULL) {
+        __ call_runtime_leaf(StubRoutines::dcos(), getThreadTemp(), result_reg, cc->args());
+      } else {
+        __ call_runtime_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::dcos), getThreadTemp(), result_reg, cc->args());
       }
       break;
     default:  ShouldNotReachHere();
@@ -949,8 +959,23 @@
     case vmIntrinsics::_dpow:
       __ call_runtime_leaf(StubRoutines::dpow(), getThreadTemp(), result_reg, cc->args());
       break;
+    case vmIntrinsics::_dsin:
+      if (StubRoutines::dsin() != NULL) {
+        __ call_runtime_leaf(StubRoutines::dsin(), getThreadTemp(), result_reg, cc->args());
+      } else {
+        __ call_runtime_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::dsin), getThreadTemp(), result_reg, cc->args());
+      }
+      break;
+    case vmIntrinsics::_dcos:
+      if (StubRoutines::dcos() != NULL) {
+        __ call_runtime_leaf(StubRoutines::dcos(), getThreadTemp(), result_reg, cc->args());
+      } else {
+        __ call_runtime_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::dcos), getThreadTemp(), result_reg, cc->args());
+      }
+      break;
+    default:  ShouldNotReachHere();
   }
-#endif
+#endif // _LP64
   __ move(result_reg, calc_result);
 }
 
--- a/hotspot/src/cpu/x86/vm/c1_LinearScan_x86.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/cpu/x86/vm/c1_LinearScan_x86.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -811,9 +811,7 @@
     }
 
 
-    case lir_tan:
-    case lir_sin:
-    case lir_cos: {
+    case lir_tan: {
       // sin, cos and exp need two temporary fpu stack slots, so there are two temporary
       // registers (stored in right and temp of the operation).
       // the stack allocator must guarantee that the stack slots are really free,
--- a/hotspot/src/cpu/x86/vm/c1_LinearScan_x86.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/cpu/x86/vm/c1_LinearScan_x86.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -67,9 +67,7 @@
 
 inline void LinearScan::pd_add_temps(LIR_Op* op) {
   switch (op->code()) {
-    case lir_tan:
-    case lir_sin:
-    case lir_cos: {
+    case lir_tan: {
       // The slow path for these functions may need to save and
       // restore all live registers but we don't want to save and
       // restore everything all the time, so mark the xmms as being
--- a/hotspot/src/cpu/x86/vm/c1_MacroAssembler_x86.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/cpu/x86/vm/c1_MacroAssembler_x86.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -182,54 +182,13 @@
 
 // preserves obj, destroys len_in_bytes
 void C1_MacroAssembler::initialize_body(Register obj, Register len_in_bytes, int hdr_size_in_bytes, Register t1) {
+  assert(hdr_size_in_bytes >= 0, "header size must be positive or 0");
   Label done;
-  assert(obj != len_in_bytes && obj != t1 && t1 != len_in_bytes, "registers must be different");
-  assert((hdr_size_in_bytes & (BytesPerWord - 1)) == 0, "header size is not a multiple of BytesPerWord");
-  Register index = len_in_bytes;
-  // index is positive and ptr sized
-  subptr(index, hdr_size_in_bytes);
+
+  // len_in_bytes is positive and ptr sized
+  subptr(len_in_bytes, hdr_size_in_bytes);
   jcc(Assembler::zero, done);
-  // initialize topmost word, divide index by 2, check if odd and test if zero
-  // note: for the remaining code to work, index must be a multiple of BytesPerWord
-#ifdef ASSERT
-  { Label L;
-    testptr(index, BytesPerWord - 1);
-    jcc(Assembler::zero, L);
-    stop("index is not a multiple of BytesPerWord");
-    bind(L);
-  }
-#endif
-  xorptr(t1, t1);    // use _zero reg to clear memory (shorter code)
-  if (UseIncDec) {
-    shrptr(index, 3);  // divide by 8/16 and set carry flag if bit 2 was set
-  } else {
-    shrptr(index, 2);  // use 2 instructions to avoid partial flag stall
-    shrptr(index, 1);
-  }
-#ifndef _LP64
-  // index could have been not a multiple of 8 (i.e., bit 2 was set)
-  { Label even;
-    // note: if index was a multiple of 8, than it cannot
-    //       be 0 now otherwise it must have been 0 before
-    //       => if it is even, we don't need to check for 0 again
-    jcc(Assembler::carryClear, even);
-    // clear topmost word (no jump needed if conditional assignment would work here)
-    movptr(Address(obj, index, Address::times_8, hdr_size_in_bytes - 0*BytesPerWord), t1);
-    // index could be 0 now, need to check again
-    jcc(Assembler::zero, done);
-    bind(even);
-  }
-#endif // !_LP64
-  // initialize remaining object fields: rdx is a multiple of 2 now
-  { Label loop;
-    bind(loop);
-    movptr(Address(obj, index, Address::times_8, hdr_size_in_bytes - 1*BytesPerWord), t1);
-    NOT_LP64(movptr(Address(obj, index, Address::times_8, hdr_size_in_bytes - 2*BytesPerWord), t1);)
-    decrement(index);
-    jcc(Assembler::notZero, loop);
-  }
-
-  // done
+  zero_memory(obj, len_in_bytes, hdr_size_in_bytes, t1);
   bind(done);
 }
 
@@ -241,47 +200,49 @@
 
   try_allocate(obj, noreg, object_size * BytesPerWord, t1, t2, slow_case);
 
-  initialize_object(obj, klass, noreg, object_size * HeapWordSize, t1, t2);
+  initialize_object(obj, klass, noreg, object_size * HeapWordSize, t1, t2, UseTLAB);
 }
 
-void C1_MacroAssembler::initialize_object(Register obj, Register klass, Register var_size_in_bytes, int con_size_in_bytes, Register t1, Register t2) {
+void C1_MacroAssembler::initialize_object(Register obj, Register klass, Register var_size_in_bytes, int con_size_in_bytes, Register t1, Register t2, bool is_tlab_allocated) {
   assert((con_size_in_bytes & MinObjAlignmentInBytesMask) == 0,
          "con_size_in_bytes is not multiple of alignment");
   const int hdr_size_in_bytes = instanceOopDesc::header_size() * HeapWordSize;
 
   initialize_header(obj, klass, noreg, t1, t2);
 
-  // clear rest of allocated space
-  const Register t1_zero = t1;
-  const Register index = t2;
-  const int threshold = 6 * BytesPerWord;   // approximate break even point for code size (see comments below)
-  if (var_size_in_bytes != noreg) {
-    mov(index, var_size_in_bytes);
-    initialize_body(obj, index, hdr_size_in_bytes, t1_zero);
-  } else if (con_size_in_bytes <= threshold) {
-    // use explicit null stores
-    // code size = 2 + 3*n bytes (n = number of fields to clear)
-    xorptr(t1_zero, t1_zero); // use t1_zero reg to clear memory (shorter code)
-    for (int i = hdr_size_in_bytes; i < con_size_in_bytes; i += BytesPerWord)
-      movptr(Address(obj, i), t1_zero);
-  } else if (con_size_in_bytes > hdr_size_in_bytes) {
-    // use loop to null out the fields
-    // code size = 16 bytes for even n (n = number of fields to clear)
-    // initialize last object field first if odd number of fields
-    xorptr(t1_zero, t1_zero); // use t1_zero reg to clear memory (shorter code)
-    movptr(index, (con_size_in_bytes - hdr_size_in_bytes) >> 3);
-    // initialize last object field if constant size is odd
-    if (((con_size_in_bytes - hdr_size_in_bytes) & 4) != 0)
-      movptr(Address(obj, con_size_in_bytes - (1*BytesPerWord)), t1_zero);
-    // initialize remaining object fields: rdx is a multiple of 2
-    { Label loop;
-      bind(loop);
-      movptr(Address(obj, index, Address::times_8, hdr_size_in_bytes - (1*BytesPerWord)),
-             t1_zero);
-      NOT_LP64(movptr(Address(obj, index, Address::times_8, hdr_size_in_bytes - (2*BytesPerWord)),
-             t1_zero);)
-      decrement(index);
-      jcc(Assembler::notZero, loop);
+  if (!(UseTLAB && ZeroTLAB && is_tlab_allocated)) {
+    // clear rest of allocated space
+    const Register t1_zero = t1;
+    const Register index = t2;
+    const int threshold = 6 * BytesPerWord;   // approximate break even point for code size (see comments below)
+    if (var_size_in_bytes != noreg) {
+      mov(index, var_size_in_bytes);
+      initialize_body(obj, index, hdr_size_in_bytes, t1_zero);
+    } else if (con_size_in_bytes <= threshold) {
+      // use explicit null stores
+      // code size = 2 + 3*n bytes (n = number of fields to clear)
+      xorptr(t1_zero, t1_zero); // use t1_zero reg to clear memory (shorter code)
+      for (int i = hdr_size_in_bytes; i < con_size_in_bytes; i += BytesPerWord)
+        movptr(Address(obj, i), t1_zero);
+    } else if (con_size_in_bytes > hdr_size_in_bytes) {
+      // use loop to null out the fields
+      // code size = 16 bytes for even n (n = number of fields to clear)
+      // initialize last object field first if odd number of fields
+      xorptr(t1_zero, t1_zero); // use t1_zero reg to clear memory (shorter code)
+      movptr(index, (con_size_in_bytes - hdr_size_in_bytes) >> 3);
+      // initialize last object field if constant size is odd
+      if (((con_size_in_bytes - hdr_size_in_bytes) & 4) != 0)
+        movptr(Address(obj, con_size_in_bytes - (1*BytesPerWord)), t1_zero);
+      // initialize remaining object fields: rdx is a multiple of 2
+      { Label loop;
+        bind(loop);
+        movptr(Address(obj, index, Address::times_8, hdr_size_in_bytes - (1*BytesPerWord)),
+               t1_zero);
+        NOT_LP64(movptr(Address(obj, index, Address::times_8, hdr_size_in_bytes - (2*BytesPerWord)),
+               t1_zero);)
+        decrement(index);
+        jcc(Assembler::notZero, loop);
+      }
     }
   }
 
--- a/hotspot/src/cpu/x86/vm/c1_MacroAssembler_x86.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/cpu/x86/vm/c1_MacroAssembler_x86.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -65,7 +65,8 @@
     Register var_size_in_bytes,        // object size in bytes if unknown at compile time; invalid otherwise
     int      con_size_in_bytes,        // object size in bytes if   known at compile time
     Register t1,                       // temp register
-    Register t2                        // temp register
+    Register t2,                       // temp register
+    bool     is_tlab_allocated         // the object was allocated in a TLAB; relevant for the implementation of ZeroTLAB
   );
 
   // allocation of fixed-size objects
--- a/hotspot/src/cpu/x86/vm/c1_Runtime1_x86.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/cpu/x86/vm/c1_Runtime1_x86.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -1040,7 +1040,7 @@
 
           __ tlab_allocate(obj, obj_size, 0, t1, t2, slow_path);
 
-          __ initialize_object(obj, klass, obj_size, 0, t1, t2);
+          __ initialize_object(obj, klass, obj_size, 0, t1, t2, /* is_tlab_allocated */ true);
           __ verify_oop(obj);
           __ pop(rbx);
           __ pop(rdi);
@@ -1053,7 +1053,7 @@
           __ eden_allocate(obj, obj_size, 0, t1, slow_path);
           __ incr_allocated_bytes(thread, obj_size, 0);
 
-          __ initialize_object(obj, klass, obj_size, 0, t1, t2);
+          __ initialize_object(obj, klass, obj_size, 0, t1, t2, /* is_tlab_allocated */ false);
           __ verify_oop(obj);
           __ pop(rbx);
           __ pop(rdi);
@@ -1169,7 +1169,9 @@
           __ andptr(t1, Klass::_lh_header_size_mask);
           __ subptr(arr_size, t1);  // body length
           __ addptr(t1, obj);       // body start
-          __ initialize_body(t1, arr_size, 0, t2);
+          if (!ZeroTLAB) {
+            __ initialize_body(t1, arr_size, 0, t2);
+          }
           __ verify_oop(obj);
           __ ret(0);
 
--- a/hotspot/src/cpu/x86/vm/globals_x86.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/cpu/x86/vm/globals_x86.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -188,5 +188,11 @@
           "Use BMI1 instructions")                                          \
                                                                             \
   product(bool, UseBMI2Instructions, false,                                 \
-          "Use BMI2 instructions")
+          "Use BMI2 instructions")                                          \
+                                                                            \
+  diagnostic(bool, UseLibmSinIntrinsic, true,                               \
+          "Use Libm Sin Intrinsic")                                         \
+                                                                            \
+  diagnostic(bool, UseLibmCosIntrinsic, true,                               \
+          "Use Libm Cos Intrinsic")
 #endif // CPU_X86_VM_GLOBALS_X86_HPP
--- a/hotspot/src/cpu/x86/vm/interpreter_x86_32.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/cpu/x86/vm/interpreter_x86_32.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -116,10 +116,24 @@
   __ fld_d(Address(rsp, 1*wordSize));
   switch (kind) {
     case Interpreter::java_lang_math_sin :
-        __ trigfunc('s');
+        __ subptr(rsp, 2 * wordSize);
+        __ fstp_d(Address(rsp, 0));
+        if (VM_Version::supports_sse2() && StubRoutines::dsin() != NULL) {
+          __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dsin())));
+        } else {
+          __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, SharedRuntime::dsin)));
+        }
+        __ addptr(rsp, 2 * wordSize);
         break;
     case Interpreter::java_lang_math_cos :
-        __ trigfunc('c');
+        __ subptr(rsp, 2 * wordSize);
+        __ fstp_d(Address(rsp, 0));
+        if (VM_Version::supports_sse2() && StubRoutines::dcos() != NULL) {
+          __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dcos())));
+        } else {
+          __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, SharedRuntime::dcos)));
+        }
+        __ addptr(rsp, 2 * wordSize);
         break;
     case Interpreter::java_lang_math_tan :
         __ trigfunc('t');
@@ -135,8 +149,7 @@
         __ fstp_d(Address(rsp, 0));
         if (VM_Version::supports_sse2()) {
           __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dlog())));
-        }
-        else {
+        } else {
           __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, SharedRuntime::dlog)));
         }
         __ addptr(rsp, 2 * wordSize);
--- a/hotspot/src/cpu/x86/vm/interpreter_x86_64.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/cpu/x86/vm/interpreter_x86_64.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -259,6 +259,12 @@
     __ movdbl(xmm1, Address(rsp, wordSize));
     __ movdbl(xmm0, Address(rsp, 3 * wordSize));
     __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dpow())));
+  } else if (kind == Interpreter::java_lang_math_sin && StubRoutines::dsin() != NULL) {
+    __ movdbl(xmm0, Address(rsp, wordSize));
+    __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dsin())));
+  } else if (kind == Interpreter::java_lang_math_cos && StubRoutines::dcos() != NULL) {
+    __ movdbl(xmm0, Address(rsp, wordSize));
+    __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dcos())));
   } else {
     __ fld_d(Address(rsp, wordSize));
     switch (kind) {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/src/cpu/x86/vm/macroAssembler_libm_x86_32.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -0,0 +1,4571 @@
+/*
+ * Copyright (c) 2015, Intel Corporation.
+ * Intel Math Library (LIBM) Source Code
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+#include "precompiled.hpp"
+#include "asm/assembler.hpp"
+#include "asm/assembler.inline.hpp"
+#include "runtime/stubRoutines.hpp"
+#include "macroAssembler_x86.hpp"
+
+#ifdef _MSC_VER
+#define ALIGNED_(x) __declspec(align(x))
+#else
+#define ALIGNED_(x) __attribute__ ((aligned(x)))
+#endif
+
+// The 32 bit code is at most SSE2 compliant
+
+/******************************************************************************/
+//                     ALGORITHM DESCRIPTION - EXP()
+//                     ---------------------
+//
+// 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
+//
+/******************************************************************************/
+
+ALIGNED_(16) juint _static_const_table[] =
+{
+    0x00000000UL, 0xfff00000UL, 0x00000000UL, 0xfff00000UL, 0xffffffc0UL,
+    0x00000000UL, 0xffffffc0UL, 0x00000000UL, 0x0000ffc0UL, 0x00000000UL,
+    0x0000ffc0UL, 0x00000000UL, 0x00000000UL, 0x43380000UL, 0x00000000UL,
+    0x43380000UL, 0x652b82feUL, 0x40571547UL, 0x652b82feUL, 0x40571547UL,
+    0xfefa0000UL, 0x3f862e42UL, 0xfefa0000UL, 0x3f862e42UL, 0xbc9e3b3aUL,
+    0x3d1cf79aUL, 0xbc9e3b3aUL, 0x3d1cf79aUL, 0xfffffffeUL, 0x3fdfffffUL,
+    0xfffffffeUL, 0x3fdfffffUL, 0xe3289860UL, 0x3f56c15cUL, 0x555b9e25UL,
+    0x3fa55555UL, 0xc090cf0fUL, 0x3f811115UL, 0x55548ba1UL, 0x3fc55555UL,
+    0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x0e03754dUL,
+    0x3cad7bbfUL, 0x3e778060UL, 0x00002c9aUL, 0x3567f613UL, 0x3c8cd252UL,
+    0xd3158574UL, 0x000059b0UL, 0x61e6c861UL, 0x3c60f74eUL, 0x18759bc8UL,
+    0x00008745UL, 0x5d837b6cUL, 0x3c979aa6UL, 0x6cf9890fUL, 0x0000b558UL,
+    0x702f9cd1UL, 0x3c3ebe3dUL, 0x32d3d1a2UL, 0x0000e3ecUL, 0x1e63bcd8UL,
+    0x3ca3516eUL, 0xd0125b50UL, 0x00011301UL, 0x26f0387bUL, 0x3ca4c554UL,
+    0xaea92ddfUL, 0x0001429aUL, 0x62523fb6UL, 0x3ca95153UL, 0x3c7d517aUL,
+    0x000172b8UL, 0x3f1353bfUL, 0x3c8b898cUL, 0xeb6fcb75UL, 0x0001a35bUL,
+    0x3e3a2f5fUL, 0x3c9aecf7UL, 0x3168b9aaUL, 0x0001d487UL, 0x44a6c38dUL,
+    0x3c8a6f41UL, 0x88628cd6UL, 0x0002063bUL, 0xe3a8a894UL, 0x3c968efdUL,
+    0x6e756238UL, 0x0002387aUL, 0x981fe7f2UL, 0x3c80472bUL, 0x65e27cddUL,
+    0x00026b45UL, 0x6d09ab31UL, 0x3c82f7e1UL, 0xf51fdee1UL, 0x00029e9dUL,
+    0x720c0ab3UL, 0x3c8b3782UL, 0xa6e4030bUL, 0x0002d285UL, 0x4db0abb6UL,
+    0x3c834d75UL, 0x0a31b715UL, 0x000306feUL, 0x5dd3f84aUL, 0x3c8fdd39UL,
+    0xb26416ffUL, 0x00033c08UL, 0xcc187d29UL, 0x3ca12f8cUL, 0x373aa9caUL,
+    0x000371a7UL, 0x738b5e8bUL, 0x3ca7d229UL, 0x34e59ff6UL, 0x0003a7dbUL,
+    0xa72a4c6dUL, 0x3c859f48UL, 0x4c123422UL, 0x0003dea6UL, 0x259d9205UL,
+    0x3ca8b846UL, 0x21f72e29UL, 0x0004160aUL, 0x60c2ac12UL, 0x3c4363edUL,
+    0x6061892dUL, 0x00044e08UL, 0xdaa10379UL, 0x3c6ecce1UL, 0xb5c13cd0UL,
+    0x000486a2UL, 0xbb7aafb0UL, 0x3c7690ceUL, 0xd5362a27UL, 0x0004bfdaUL,
+    0x9b282a09UL, 0x3ca083ccUL, 0x769d2ca6UL, 0x0004f9b2UL, 0xc1aae707UL,
+    0x3ca509b0UL, 0x569d4f81UL, 0x0005342bUL, 0x18fdd78eUL, 0x3c933505UL,
+    0x36b527daUL, 0x00056f47UL, 0xe21c5409UL, 0x3c9063e1UL, 0xdd485429UL,
+    0x0005ab07UL, 0x2b64c035UL, 0x3c9432e6UL, 0x15ad2148UL, 0x0005e76fUL,
+    0x99f08c0aUL, 0x3ca01284UL, 0xb03a5584UL, 0x0006247eUL, 0x0073dc06UL,
+    0x3c99f087UL, 0x82552224UL, 0x00066238UL, 0x0da05571UL, 0x3c998d4dUL,
+    0x667f3bccUL, 0x0006a09eUL, 0x86ce4786UL, 0x3ca52bb9UL, 0x3c651a2eUL,
+    0x0006dfb2UL, 0x206f0dabUL, 0x3ca32092UL, 0xe8ec5f73UL, 0x00071f75UL,
+    0x8e17a7a6UL, 0x3ca06122UL, 0x564267c8UL, 0x00075febUL, 0x461e9f86UL,
+    0x3ca244acUL, 0x73eb0186UL, 0x0007a114UL, 0xabd66c55UL, 0x3c65ebe1UL,
+    0x36cf4e62UL, 0x0007e2f3UL, 0xbbff67d0UL, 0x3c96fe9fUL, 0x994cce12UL,
+    0x00082589UL, 0x14c801dfUL, 0x3c951f14UL, 0x9b4492ecUL, 0x000868d9UL,
+    0xc1f0eab4UL, 0x3c8db72fUL, 0x422aa0dbUL, 0x0008ace5UL, 0x59f35f44UL,
+    0x3c7bf683UL, 0x99157736UL, 0x0008f1aeUL, 0x9c06283cUL, 0x3ca360baUL,
+    0xb0cdc5e4UL, 0x00093737UL, 0x20f962aaUL, 0x3c95e8d1UL, 0x9fde4e4fUL,
+    0x00097d82UL, 0x2b91ce27UL, 0x3c71affcUL, 0x82a3f090UL, 0x0009c491UL,
+    0x589a2ebdUL, 0x3c9b6d34UL, 0x7b5de564UL, 0x000a0c66UL, 0x9ab89880UL,
+    0x3c95277cUL, 0xb23e255cUL, 0x000a5503UL, 0x6e735ab3UL, 0x3c846984UL,
+    0x5579fdbfUL, 0x000a9e6bUL, 0x92cb3387UL, 0x3c8c1a77UL, 0x995ad3adUL,
+    0x000ae89fUL, 0xdc2d1d96UL, 0x3ca22466UL, 0xb84f15faUL, 0x000b33a2UL,
+    0xb19505aeUL, 0x3ca1112eUL, 0xf2fb5e46UL, 0x000b7f76UL, 0x0a5fddcdUL,
+    0x3c74ffd7UL, 0x904bc1d2UL, 0x000bcc1eUL, 0x30af0cb3UL, 0x3c736eaeUL,
+    0xdd85529cUL, 0x000c199bUL, 0xd10959acUL, 0x3c84e08fUL, 0x2e57d14bUL,
+    0x000c67f1UL, 0x6c921968UL, 0x3c676b2cUL, 0xdcef9069UL, 0x000cb720UL,
+    0x36df99b3UL, 0x3c937009UL, 0x4a07897bUL, 0x000d072dUL, 0xa63d07a7UL,
+    0x3c74a385UL, 0xdcfba487UL, 0x000d5818UL, 0xd5c192acUL, 0x3c8e5a50UL,
+    0x03db3285UL, 0x000da9e6UL, 0x1c4a9792UL, 0x3c98bb73UL, 0x337b9b5eUL,
+    0x000dfc97UL, 0x603a88d3UL, 0x3c74b604UL, 0xe78b3ff6UL, 0x000e502eUL,
+    0x92094926UL, 0x3c916f27UL, 0xa2a490d9UL, 0x000ea4afUL, 0x41aa2008UL,
+    0x3c8ec3bcUL, 0xee615a27UL, 0x000efa1bUL, 0x31d185eeUL, 0x3c8a64a9UL,
+    0x5b6e4540UL, 0x000f5076UL, 0x4d91cd9dUL, 0x3c77893bUL, 0x819e90d8UL,
+    0x000fa7c1UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0x7ff00000UL,
+    0x00000000UL, 0x00000000UL, 0xffffffffUL, 0x7fefffffUL, 0x00000000UL,
+    0x00100000UL
+};
+
+//registers,
+// input: (rbp + 8)
+// scratch: xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7
+//          rax, rdx, rcx, rbx (tmp)
+
+// Code generated by Intel C compiler for LIBM library
+
+void MacroAssembler::fast_exp(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ecx, Register edx, Register tmp) {
+  Label L_2TAG_PACKET_0_0_2, L_2TAG_PACKET_1_0_2, L_2TAG_PACKET_2_0_2, L_2TAG_PACKET_3_0_2;
+  Label L_2TAG_PACKET_4_0_2, L_2TAG_PACKET_5_0_2, L_2TAG_PACKET_6_0_2, L_2TAG_PACKET_7_0_2;
+  Label L_2TAG_PACKET_8_0_2, L_2TAG_PACKET_9_0_2, L_2TAG_PACKET_10_0_2, L_2TAG_PACKET_11_0_2;
+  Label L_2TAG_PACKET_12_0_2, L_2TAG_PACKET_13_0_2, B1_3, B1_5, start;
+
+  assert_different_registers(tmp, eax, ecx, edx);
+  jmp(start);
+  address static_const_table = (address)_static_const_table;
+
+  bind(start);
+  subl(rsp, 120);
+  movl(Address(rsp, 64), tmp);
+  lea(tmp, ExternalAddress(static_const_table));
+  movdqu(xmm0, Address(rsp, 128));
+  unpcklpd(xmm0, xmm0);
+  movdqu(xmm1, Address(tmp, 64));          // 0x652b82feUL, 0x40571547UL, 0x652b82feUL, 0x40571547UL
+  movdqu(xmm6, Address(tmp, 48));          // 0x00000000UL, 0x43380000UL, 0x00000000UL, 0x43380000UL
+  movdqu(xmm2, Address(tmp, 80));          // 0xfefa0000UL, 0x3f862e42UL, 0xfefa0000UL, 0x3f862e42UL
+  movdqu(xmm3, Address(tmp, 96));          // 0xbc9e3b3aUL, 0x3d1cf79aUL, 0xbc9e3b3aUL, 0x3d1cf79aUL
+  pextrw(eax, xmm0, 3);
+  andl(eax, 32767);
+  movl(edx, 16527);
+  subl(edx, eax);
+  subl(eax, 15504);
+  orl(edx, eax);
+  cmpl(edx, INT_MIN);
+  jcc(Assembler::aboveEqual, L_2TAG_PACKET_0_0_2);
+  mulpd(xmm1, xmm0);
+  addpd(xmm1, xmm6);
+  movapd(xmm7, xmm1);
+  subpd(xmm1, xmm6);
+  mulpd(xmm2, xmm1);
+  movdqu(xmm4, Address(tmp, 128));         // 0xe3289860UL, 0x3f56c15cUL, 0x555b9e25UL, 0x3fa55555UL
+  mulpd(xmm3, xmm1);
+  movdqu(xmm5, Address(tmp, 144));         // 0xc090cf0fUL, 0x3f811115UL, 0x55548ba1UL, 0x3fc55555UL
+  subpd(xmm0, xmm2);
+  movdl(eax, xmm7);
+  movl(ecx, eax);
+  andl(ecx, 63);
+  shll(ecx, 4);
+  sarl(eax, 6);
+  movl(edx, eax);
+  movdqu(xmm6, Address(tmp, 16));          // 0xffffffc0UL, 0x00000000UL, 0xffffffc0UL, 0x00000000UL
+  pand(xmm7, xmm6);
+  movdqu(xmm6, Address(tmp, 32));          // 0x0000ffc0UL, 0x00000000UL, 0x0000ffc0UL, 0x00000000UL
+  paddq(xmm7, xmm6);
+  psllq(xmm7, 46);
+  subpd(xmm0, xmm3);
+  movdqu(xmm2, Address(tmp, ecx, Address::times_1, 160));
+  mulpd(xmm4, xmm0);
+  movapd(xmm6, xmm0);
+  movapd(xmm1, xmm0);
+  mulpd(xmm6, xmm6);
+  mulpd(xmm0, xmm6);
+  addpd(xmm5, xmm4);
+  mulsd(xmm0, xmm6);
+  mulpd(xmm6, Address(tmp, 112));          // 0xfffffffeUL, 0x3fdfffffUL, 0xfffffffeUL, 0x3fdfffffUL
+  addsd(xmm1, xmm2);
+  unpckhpd(xmm2, xmm2);
+  mulpd(xmm0, xmm5);
+  addsd(xmm1, xmm0);
+  por(xmm2, xmm7);
+  unpckhpd(xmm0, xmm0);
+  addsd(xmm0, xmm1);
+  addsd(xmm0, xmm6);
+  addl(edx, 894);
+  cmpl(edx, 1916);
+  jcc (Assembler::above, L_2TAG_PACKET_1_0_2);
+  mulsd(xmm0, xmm2);
+  addsd(xmm0, xmm2);
+  jmp(L_2TAG_PACKET_2_0_2);
+
+  bind(L_2TAG_PACKET_1_0_2);
+  fnstcw(Address(rsp, 24));
+  movzwl(edx, Address(rsp, 24));
+  orl(edx, 768);
+  movw(Address(rsp, 28), edx);
+  fldcw(Address(rsp, 28));
+  movl(edx, eax);
+  sarl(eax, 1);
+  subl(edx, eax);
+  movdqu(xmm6, Address(tmp, 0));           // 0x00000000UL, 0xfff00000UL, 0x00000000UL, 0xfff00000UL
+  pandn(xmm6, xmm2);
+  addl(eax, 1023);
+  movdl(xmm3, eax);
+  psllq(xmm3, 52);
+  por(xmm6, xmm3);
+  addl(edx, 1023);
+  movdl(xmm4, edx);
+  psllq(xmm4, 52);
+  movsd(Address(rsp, 8), xmm0);
+  fld_d(Address(rsp, 8));
+  movsd(Address(rsp, 16), xmm6);
+  fld_d(Address(rsp, 16));
+  fmula(1);
+  faddp(1);
+  movsd(Address(rsp, 8), xmm4);
+  fld_d(Address(rsp, 8));
+  fmulp(1);
+  fstp_d(Address(rsp, 8));
+  movsd(xmm0,Address(rsp, 8));
+  fldcw(Address(rsp, 24));
+  pextrw(ecx, xmm0, 3);
+  andl(ecx, 32752);
+  cmpl(ecx, 32752);
+  jcc(Assembler::greaterEqual, L_2TAG_PACKET_3_0_2);
+  cmpl(ecx, 0);
+  jcc(Assembler::equal, L_2TAG_PACKET_4_0_2);
+  jmp(L_2TAG_PACKET_2_0_2);
+  cmpl(ecx, INT_MIN);
+  jcc(Assembler::less, L_2TAG_PACKET_3_0_2);
+  cmpl(ecx, -1064950997);
+  jcc(Assembler::less, L_2TAG_PACKET_2_0_2);
+  jcc(Assembler::greater, L_2TAG_PACKET_4_0_2);
+  movl(edx, Address(rsp, 128));
+  cmpl(edx ,-17155601);
+  jcc(Assembler::less, L_2TAG_PACKET_2_0_2);
+  jmp(L_2TAG_PACKET_4_0_2);
+
+  bind(L_2TAG_PACKET_3_0_2);
+  movl(edx, 14);
+  jmp(L_2TAG_PACKET_5_0_2);
+
+  bind(L_2TAG_PACKET_4_0_2);
+  movl(edx, 15);
+
+  bind(L_2TAG_PACKET_5_0_2);
+  movsd(Address(rsp, 0), xmm0);
+  movsd(xmm0, Address(rsp, 128));
+  fld_d(Address(rsp, 0));
+  jmp(L_2TAG_PACKET_6_0_2);
+
+  bind(L_2TAG_PACKET_7_0_2);
+  cmpl(eax, 2146435072);
+  jcc(Assembler::greaterEqual, L_2TAG_PACKET_8_0_2);
+  movl(eax, Address(rsp, 132));
+  cmpl(eax, INT_MIN);
+  jcc(Assembler::greaterEqual, L_2TAG_PACKET_9_0_2);
+  movsd(xmm0, Address(tmp, 1208));         // 0xffffffffUL, 0x7fefffffUL
+  mulsd(xmm0, xmm0);
+  movl(edx, 14);
+  jmp(L_2TAG_PACKET_5_0_2);
+
+  bind(L_2TAG_PACKET_9_0_2);
+  movsd(xmm0, Address(tmp, 1216));
+  mulsd(xmm0, xmm0);
+  movl(edx, 15);
+  jmp(L_2TAG_PACKET_5_0_2);
+
+  bind(L_2TAG_PACKET_8_0_2);
+  movl(edx, Address(rsp, 128));
+  cmpl(eax, 2146435072);
+  jcc(Assembler::above, L_2TAG_PACKET_10_0_2);
+  cmpl(edx, 0);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_10_0_2);
+  movl(eax, Address(rsp, 132));
+  cmpl(eax, 2146435072);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_11_0_2);
+  movsd(xmm0, Address(tmp, 1192));         // 0x00000000UL, 0x7ff00000UL
+  jmp(L_2TAG_PACKET_2_0_2);
+
+  bind(L_2TAG_PACKET_11_0_2);
+  movsd(xmm0, Address(tmp, 1200));         // 0x00000000UL, 0x00000000UL
+  jmp(L_2TAG_PACKET_2_0_2);
+
+  bind(L_2TAG_PACKET_10_0_2);
+  movsd(xmm0, Address(rsp, 128));
+  addsd(xmm0, xmm0);
+  jmp(L_2TAG_PACKET_2_0_2);
+
+  bind(L_2TAG_PACKET_0_0_2);
+  movl(eax, Address(rsp, 132));
+  andl(eax, 2147483647);
+  cmpl(eax, 1083179008);
+  jcc(Assembler::aboveEqual, L_2TAG_PACKET_7_0_2);
+  movsd(xmm0, Address(rsp, 128));
+  addsd(xmm0, Address(tmp, 1184));         // 0x00000000UL, 0x3ff00000UL
+  jmp(L_2TAG_PACKET_2_0_2);
+
+  bind(L_2TAG_PACKET_2_0_2);
+  movsd(Address(rsp, 48), xmm0);
+  fld_d(Address(rsp, 48));
+
+  bind(L_2TAG_PACKET_6_0_2);
+  movl(tmp, Address(rsp, 64));
+}
+
+/******************************************************************************/
+//                     ALGORITHM DESCRIPTION - LOG()
+//                     ---------------------
+//
+//    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
+//
+/******************************************************************************/
+
+ALIGNED_(16) juint _static_const_table_log[] =
+{
+  0xfefa3800UL, 0x3fe62e42UL, 0x93c76730UL, 0x3d2ef357UL, 0xaa241800UL,
+  0x3fe5ee82UL, 0x0cda46beUL, 0x3d220238UL, 0x5c364800UL, 0x3fe5af40UL,
+  0xac10c9fbUL, 0x3d2dfa63UL, 0x26bb8c00UL, 0x3fe5707aUL, 0xff3303ddUL,
+  0x3d09980bUL, 0x26867800UL, 0x3fe5322eUL, 0x5d257531UL, 0x3d05ccc4UL,
+  0x835a5000UL, 0x3fe4f45aUL, 0x6d93b8fbUL, 0xbd2e6c51UL, 0x6f970c00UL,
+  0x3fe4b6fdUL, 0xed4c541cUL, 0x3cef7115UL, 0x27e8a400UL, 0x3fe47a15UL,
+  0xf94d60aaUL, 0xbd22cb6aUL, 0xf2f92400UL, 0x3fe43d9fUL, 0x481051f7UL,
+  0xbcfd984fUL, 0x2125cc00UL, 0x3fe4019cUL, 0x30f0c74cUL, 0xbd26ce79UL,
+  0x0c36c000UL, 0x3fe3c608UL, 0x7cfe13c2UL, 0xbd02b736UL, 0x17197800UL,
+  0x3fe38ae2UL, 0xbb5569a4UL, 0xbd218b7aUL, 0xad9d8c00UL, 0x3fe35028UL,
+  0x9527e6acUL, 0x3d10b83fUL, 0x44340800UL, 0x3fe315daUL, 0xc5a0ed9cUL,
+  0xbd274e93UL, 0x57b0e000UL, 0x3fe2dbf5UL, 0x07b9dc11UL, 0xbd17a6e5UL,
+  0x6d0ec000UL, 0x3fe2a278UL, 0xe797882dUL, 0x3d206d2bUL, 0x1134dc00UL,
+  0x3fe26962UL, 0x05226250UL, 0xbd0b61f1UL, 0xd8bebc00UL, 0x3fe230b0UL,
+  0x6e48667bUL, 0x3d12fc06UL, 0x5fc61800UL, 0x3fe1f863UL, 0xc9fe81d3UL,
+  0xbd2a7242UL, 0x49ae6000UL, 0x3fe1c078UL, 0xed70e667UL, 0x3cccacdeUL,
+  0x40f23c00UL, 0x3fe188eeUL, 0xf8ab4650UL, 0x3d14cc4eUL, 0xf6f29800UL,
+  0x3fe151c3UL, 0xa293ae49UL, 0xbd2edd97UL, 0x23c75c00UL, 0x3fe11af8UL,
+  0xbb9ddcb2UL, 0xbd258647UL, 0x8611cc00UL, 0x3fe0e489UL, 0x07801742UL,
+  0x3d1c2998UL, 0xe2d05400UL, 0x3fe0ae76UL, 0x887e7e27UL, 0x3d1f486bUL,
+  0x0533c400UL, 0x3fe078bfUL, 0x41edf5fdUL, 0x3d268122UL, 0xbe760400UL,
+  0x3fe04360UL, 0xe79539e0UL, 0xbd04c45fUL, 0xe5b20800UL, 0x3fe00e5aUL,
+  0xb1727b1cUL, 0xbd053ba3UL, 0xaf7a4800UL, 0x3fdfb358UL, 0x3c164935UL,
+  0x3d0085faUL, 0xee031800UL, 0x3fdf4aa7UL, 0x6f014a8bUL, 0x3d12cde5UL,
+  0x56b41000UL, 0x3fdee2a1UL, 0x5a470251UL, 0x3d2f27f4UL, 0xc3ddb000UL,
+  0x3fde7b42UL, 0x5372bd08UL, 0xbd246550UL, 0x1a272800UL, 0x3fde148aUL,
+  0x07322938UL, 0xbd1326b2UL, 0x484c9800UL, 0x3fddae75UL, 0x60dc616aUL,
+  0xbd1ea42dUL, 0x46def800UL, 0x3fdd4902UL, 0xe9a767a8UL, 0x3d235bafUL,
+  0x18064800UL, 0x3fdce42fUL, 0x3ec7a6b0UL, 0xbd0797c3UL, 0xc7455800UL,
+  0x3fdc7ff9UL, 0xc15249aeUL, 0xbd29b6ddUL, 0x693fa000UL, 0x3fdc1c60UL,
+  0x7fe8e180UL, 0x3d2cec80UL, 0x1b80e000UL, 0x3fdbb961UL, 0xf40a666dUL,
+  0x3d27d85bUL, 0x04462800UL, 0x3fdb56faUL, 0x2d841995UL, 0x3d109525UL,
+  0x5248d000UL, 0x3fdaf529UL, 0x52774458UL, 0xbd217cc5UL, 0x3c8ad800UL,
+  0x3fda93edUL, 0xbea77a5dUL, 0x3d1e36f2UL, 0x0224f800UL, 0x3fda3344UL,
+  0x7f9d79f5UL, 0x3d23c645UL, 0xea15f000UL, 0x3fd9d32bUL, 0x10d0c0b0UL,
+  0xbd26279eUL, 0x43135800UL, 0x3fd973a3UL, 0xa502d9f0UL, 0xbd152313UL,
+  0x635bf800UL, 0x3fd914a8UL, 0x2ee6307dUL, 0xbd1766b5UL, 0xa88b3000UL,
+  0x3fd8b639UL, 0xe5e70470UL, 0xbd205ae1UL, 0x776dc800UL, 0x3fd85855UL,
+  0x3333778aUL, 0x3d2fd56fUL, 0x3bd81800UL, 0x3fd7fafaUL, 0xc812566aUL,
+  0xbd272090UL, 0x687cf800UL, 0x3fd79e26UL, 0x2efd1778UL, 0x3d29ec7dUL,
+  0x76c67800UL, 0x3fd741d8UL, 0x49dc60b3UL, 0x3d2d8b09UL, 0xe6af1800UL,
+  0x3fd6e60eUL, 0x7c222d87UL, 0x3d172165UL, 0x3e9c6800UL, 0x3fd68ac8UL,
+  0x2756eba0UL, 0x3d20a0d3UL, 0x0b3ab000UL, 0x3fd63003UL, 0xe731ae00UL,
+  0xbd2db623UL, 0xdf596000UL, 0x3fd5d5bdUL, 0x08a465dcUL, 0xbd0a0b2aUL,
+  0x53c8d000UL, 0x3fd57bf7UL, 0xee5d40efUL, 0x3d1fadedUL, 0x0738a000UL,
+  0x3fd522aeUL, 0x8164c759UL, 0x3d2ebe70UL, 0x9e173000UL, 0x3fd4c9e0UL,
+  0x1b0ad8a4UL, 0xbd2e2089UL, 0xc271c800UL, 0x3fd4718dUL, 0x0967d675UL,
+  0xbd2f27ceUL, 0x23d5e800UL, 0x3fd419b4UL, 0xec90e09dUL, 0x3d08e436UL,
+  0x77333000UL, 0x3fd3c252UL, 0xb606bd5cUL, 0x3d183b54UL, 0x76be1000UL,
+  0x3fd36b67UL, 0xb0f177c8UL, 0x3d116ecdUL, 0xe1d36000UL, 0x3fd314f1UL,
+  0xd3213cb8UL, 0xbd28e27aUL, 0x7cdc9000UL, 0x3fd2bef0UL, 0x4a5004f4UL,
+  0x3d2a9cfaUL, 0x1134d800UL, 0x3fd26962UL, 0xdf5bb3b6UL, 0x3d2c93c1UL,
+  0x6d0eb800UL, 0x3fd21445UL, 0xba46baeaUL, 0x3d0a87deUL, 0x635a6800UL,
+  0x3fd1bf99UL, 0x5147bdb7UL, 0x3d2ca6edUL, 0xcbacf800UL, 0x3fd16b5cUL,
+  0xf7a51681UL, 0x3d2b9acdUL, 0x8227e800UL, 0x3fd1178eUL, 0x63a5f01cUL,
+  0xbd2c210eUL, 0x67616000UL, 0x3fd0c42dUL, 0x163ceae9UL, 0x3d27188bUL,
+  0x604d5800UL, 0x3fd07138UL, 0x16ed4e91UL, 0x3cf89cdbUL, 0x5626c800UL,
+  0x3fd01eaeUL, 0x1485e94aUL, 0xbd16f08cUL, 0x6cb3b000UL, 0x3fcf991cUL,
+  0xca0cdf30UL, 0x3d1bcbecUL, 0xe4dd0000UL, 0x3fcef5adUL, 0x65bb8e11UL,
+  0xbcca2115UL, 0xffe71000UL, 0x3fce530eUL, 0x6041f430UL, 0x3cc21227UL,
+  0xb0d49000UL, 0x3fcdb13dUL, 0xf715b035UL, 0xbd2aff2aUL, 0xf2656000UL,
+  0x3fcd1037UL, 0x75b6f6e4UL, 0xbd084a7eUL, 0xc6f01000UL, 0x3fcc6ffbUL,
+  0xc5962bd2UL, 0xbcf1ec72UL, 0x383be000UL, 0x3fcbd087UL, 0x595412b6UL,
+  0xbd2d4bc4UL, 0x575bd000UL, 0x3fcb31d8UL, 0x4eace1aaUL, 0xbd0c358dUL,
+  0x3c8ae000UL, 0x3fca93edUL, 0x50562169UL, 0xbd287243UL, 0x07089000UL,
+  0x3fc9f6c4UL, 0x6865817aUL, 0x3d29904dUL, 0xdcf70000UL, 0x3fc95a5aUL,
+  0x58a0ff6fUL, 0x3d07f228UL, 0xeb390000UL, 0x3fc8beafUL, 0xaae92cd1UL,
+  0xbd073d54UL, 0x6551a000UL, 0x3fc823c1UL, 0x9a631e83UL, 0x3d1e0ddbUL,
+  0x85445000UL, 0x3fc7898dUL, 0x70914305UL, 0xbd1c6610UL, 0x8b757000UL,
+  0x3fc6f012UL, 0xe59c21e1UL, 0xbd25118dUL, 0xbe8c1000UL, 0x3fc6574eUL,
+  0x2c3c2e78UL, 0x3d19cf8bUL, 0x6b544000UL, 0x3fc5bf40UL, 0xeb68981cUL,
+  0xbd127023UL, 0xe4a1b000UL, 0x3fc527e5UL, 0xe5697dc7UL, 0x3d2633e8UL,
+  0x8333b000UL, 0x3fc4913dUL, 0x54fdb678UL, 0x3d258379UL, 0xa5993000UL,
+  0x3fc3fb45UL, 0x7e6a354dUL, 0xbd2cd1d8UL, 0xb0159000UL, 0x3fc365fcUL,
+  0x234b7289UL, 0x3cc62fa8UL, 0x0c868000UL, 0x3fc2d161UL, 0xcb81b4a1UL,
+  0x3d039d6cUL, 0x2a49c000UL, 0x3fc23d71UL, 0x8fd3df5cUL, 0x3d100d23UL,
+  0x7e23f000UL, 0x3fc1aa2bUL, 0x44389934UL, 0x3d2ca78eUL, 0x8227e000UL,
+  0x3fc1178eUL, 0xce2d07f2UL, 0x3d21ef78UL, 0xb59e4000UL, 0x3fc08598UL,
+  0x7009902cUL, 0xbd27e5ddUL, 0x39dbe000UL, 0x3fbfe891UL, 0x4fa10afdUL,
+  0xbd2534d6UL, 0x830a2000UL, 0x3fbec739UL, 0xafe645e0UL, 0xbd2dc068UL,
+  0x63844000UL, 0x3fbda727UL, 0x1fa71733UL, 0x3d1a8940UL, 0x01bc4000UL,
+  0x3fbc8858UL, 0xc65aacd3UL, 0x3d2646d1UL, 0x8dad6000UL, 0x3fbb6ac8UL,
+  0x2bf768e5UL, 0xbd139080UL, 0x40b1c000UL, 0x3fba4e76UL, 0xb94407c8UL,
+  0xbd0e42b6UL, 0x5d594000UL, 0x3fb9335eUL, 0x3abd47daUL, 0x3d23115cUL,
+  0x2f40e000UL, 0x3fb8197eUL, 0xf96ffdf7UL, 0x3d0f80dcUL, 0x0aeac000UL,
+  0x3fb700d3UL, 0xa99ded32UL, 0x3cec1e8dUL, 0x4d97a000UL, 0x3fb5e95aUL,
+  0x3c5d1d1eUL, 0xbd2c6906UL, 0x5d208000UL, 0x3fb4d311UL, 0x82f4e1efUL,
+  0xbcf53a25UL, 0xa7d1e000UL, 0x3fb3bdf5UL, 0xa5db4ed7UL, 0x3d2cc85eUL,
+  0xa4472000UL, 0x3fb2aa04UL, 0xae9c697dUL, 0xbd20b6e8UL, 0xd1466000UL,
+  0x3fb1973bUL, 0x560d9e9bUL, 0xbd25325dUL, 0xb59e4000UL, 0x3fb08598UL,
+  0x7009902cUL, 0xbd17e5ddUL, 0xc006c000UL, 0x3faeea31UL, 0x4fc93b7bUL,
+  0xbd0e113eUL, 0xcdddc000UL, 0x3faccb73UL, 0x47d82807UL, 0xbd1a68f2UL,
+  0xd0fb0000UL, 0x3faaaef2UL, 0x353bb42eUL, 0x3d20fc1aUL, 0x149fc000UL,
+  0x3fa894aaUL, 0xd05a267dUL, 0xbd197995UL, 0xf2d4c000UL, 0x3fa67c94UL,
+  0xec19afa2UL, 0xbd029efbUL, 0xd42e0000UL, 0x3fa466aeUL, 0x75bdfd28UL,
+  0xbd2c1673UL, 0x2f8d0000UL, 0x3fa252f3UL, 0xe021b67bUL, 0x3d283e9aUL,
+  0x89e74000UL, 0x3fa0415dUL, 0x5cf1d753UL, 0x3d0111c0UL, 0xec148000UL,
+  0x3f9c63d2UL, 0x3f9eb2f3UL, 0x3d2578c6UL, 0x28c90000UL, 0x3f984925UL,
+  0x325a0c34UL, 0xbd2aa0baUL, 0x25980000UL, 0x3f9432a9UL, 0x928637feUL,
+  0x3d098139UL, 0x58938000UL, 0x3f902056UL, 0x06e2f7d2UL, 0xbd23dc5bUL,
+  0xa3890000UL, 0x3f882448UL, 0xda74f640UL, 0xbd275577UL, 0x75890000UL,
+  0x3f801015UL, 0x999d2be8UL, 0xbd10c76bUL, 0x59580000UL, 0x3f700805UL,
+  0xcb31c67bUL, 0x3d2166afUL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
+  0x80000000UL, 0xfefa3800UL, 0x3fa62e42UL, 0x93c76730UL, 0x3ceef357UL,
+  0x92492492UL, 0x3fc24924UL, 0x00000000UL, 0xbfd00000UL, 0x3d6fb175UL,
+  0xbfc5555eUL, 0x55555555UL, 0x3fd55555UL, 0x9999999aUL, 0x3fc99999UL,
+  0x00000000UL, 0xbfe00000UL, 0x00000000UL, 0xffffe000UL, 0x00000000UL,
+  0xffffe000UL
+};
+//registers,
+// input: xmm0
+// scratch: xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7
+//          rax, rdx, rcx, rbx (tmp)
+
+void MacroAssembler::fast_log(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ecx, Register edx, Register tmp) {
+  Label L_2TAG_PACKET_0_0_2, L_2TAG_PACKET_1_0_2, L_2TAG_PACKET_2_0_2, L_2TAG_PACKET_3_0_2;
+  Label L_2TAG_PACKET_4_0_2, L_2TAG_PACKET_5_0_2, L_2TAG_PACKET_6_0_2, L_2TAG_PACKET_7_0_2;
+  Label L_2TAG_PACKET_8_0_2, L_2TAG_PACKET_9_0_2;
+  Label L_2TAG_PACKET_10_0_2, start;
+
+  assert_different_registers(tmp, eax, ecx, edx);
+  jmp(start);
+  address static_const_table = (address)_static_const_table_log;
+
+  bind(start);
+  subl(rsp, 104);
+  movl(Address(rsp, 40), tmp);
+  lea(tmp, ExternalAddress(static_const_table));
+  xorpd(xmm2, xmm2);
+  movl(eax, 16368);
+  pinsrw(xmm2, eax, 3);
+  xorpd(xmm3, xmm3);
+  movl(edx, 30704);
+  pinsrw(xmm3, edx, 3);
+  movsd(xmm0, Address(rsp, 112));
+  movapd(xmm1, xmm0);
+  movl(ecx, 32768);
+  movdl(xmm4, ecx);
+  movsd(xmm5, Address(tmp, 2128));         // 0x00000000UL, 0xffffe000UL
+  pextrw(eax, xmm0, 3);
+  por(xmm0, xmm2);
+  psllq(xmm0, 5);
+  movl(ecx, 16352);
+  psrlq(xmm0, 34);
+  rcpss(xmm0, xmm0);
+  psllq(xmm1, 12);
+  pshufd(xmm6, xmm5, 228);
+  psrlq(xmm1, 12);
+  subl(eax, 16);
+  cmpl(eax, 32736);
+  jcc(Assembler::aboveEqual, L_2TAG_PACKET_0_0_2);
+
+  bind(L_2TAG_PACKET_1_0_2);
+  paddd(xmm0, xmm4);
+  por(xmm1, xmm3);
+  movdl(edx, xmm0);
+  psllq(xmm0, 29);
+  pand(xmm5, xmm1);
+  pand(xmm0, xmm6);
+  subsd(xmm1, xmm5);
+  mulpd(xmm5, xmm0);
+  andl(eax, 32752);
+  subl(eax, ecx);
+  cvtsi2sdl(xmm7, eax);
+  mulsd(xmm1, xmm0);
+  movsd(xmm6, Address(tmp, 2064));         // 0xfefa3800UL, 0x3fa62e42UL
+  movdqu(xmm3, Address(tmp, 2080));        // 0x92492492UL, 0x3fc24924UL, 0x00000000UL, 0xbfd00000UL
+  subsd(xmm5, xmm2);
+  andl(edx, 16711680);
+  shrl(edx, 12);
+  movdqu(xmm0, Address(tmp, edx));
+  movdqu(xmm4, Address(tmp, 2096));        // 0x3d6fb175UL, 0xbfc5555eUL, 0x55555555UL, 0x3fd55555UL
+  addsd(xmm1, xmm5);
+  movdqu(xmm2, Address(tmp, 2112));        // 0x9999999aUL, 0x3fc99999UL, 0x00000000UL, 0xbfe00000UL
+  mulsd(xmm6, xmm7);
+  pshufd(xmm5, xmm1, 68);
+  mulsd(xmm7, Address(tmp, 2072));         // 0x93c76730UL, 0x3ceef357UL, 0x92492492UL, 0x3fc24924UL
+  mulsd(xmm3, xmm1);
+  addsd(xmm0, xmm6);
+  mulpd(xmm4, xmm5);
+  mulpd(xmm5, xmm5);
+  pshufd(xmm6, xmm0, 228);
+  addsd(xmm0, xmm1);
+  addpd(xmm4, xmm2);
+  mulpd(xmm3, xmm5);
+  subsd(xmm6, xmm0);
+  mulsd(xmm4, xmm1);
+  pshufd(xmm2, xmm0, 238);
+  addsd(xmm1, xmm6);
+  mulsd(xmm5, xmm5);
+  addsd(xmm7, xmm2);
+  addpd(xmm4, xmm3);
+  addsd(xmm1, xmm7);
+  mulpd(xmm4, xmm5);
+  addsd(xmm1, xmm4);
+  pshufd(xmm5, xmm4, 238);
+  addsd(xmm1, xmm5);
+  addsd(xmm0, xmm1);
+  jmp(L_2TAG_PACKET_2_0_2);
+
+  bind(L_2TAG_PACKET_0_0_2);
+  movsd(xmm0, Address(rsp, 112));
+  movdqu(xmm1, xmm0);
+  addl(eax, 16);
+  cmpl(eax, 32768);
+  jcc(Assembler::aboveEqual, L_2TAG_PACKET_3_0_2);
+  cmpl(eax, 16);
+  jcc(Assembler::below, L_2TAG_PACKET_4_0_2);
+
+  bind(L_2TAG_PACKET_5_0_2);
+  addsd(xmm0, xmm0);
+  jmp(L_2TAG_PACKET_2_0_2);
+
+  bind(L_2TAG_PACKET_6_0_2);
+  jcc(Assembler::above, L_2TAG_PACKET_5_0_2);
+  cmpl(edx, 0);
+  jcc(Assembler::above, L_2TAG_PACKET_5_0_2);
+  jmp(L_2TAG_PACKET_7_0_2);
+
+  bind(L_2TAG_PACKET_3_0_2);
+  movdl(edx, xmm1);
+  psrlq(xmm1, 32);
+  movdl(ecx, xmm1);
+  addl(ecx, ecx);
+  cmpl(ecx, -2097152);
+  jcc(Assembler::aboveEqual, L_2TAG_PACKET_6_0_2);
+  orl(edx, ecx);
+  cmpl(edx, 0);
+  jcc(Assembler::equal, L_2TAG_PACKET_8_0_2);
+
+  bind(L_2TAG_PACKET_7_0_2);
+  xorpd(xmm1, xmm1);
+  xorpd(xmm0, xmm0);
+  movl(eax, 32752);
+  pinsrw(xmm1, eax, 3);
+  movl(edx, 3);
+  mulsd(xmm0, xmm1);
+
+  bind(L_2TAG_PACKET_9_0_2);
+  movsd(Address(rsp, 0), xmm0);
+  movsd(xmm0, Address(rsp, 112));
+  fld_d(Address(rsp, 0));
+  jmp(L_2TAG_PACKET_10_0_2);
+
+  bind(L_2TAG_PACKET_8_0_2);
+  xorpd(xmm1, xmm1);
+  xorpd(xmm0, xmm0);
+  movl(eax, 49136);
+  pinsrw(xmm0, eax, 3);
+  divsd(xmm0, xmm1);
+  movl(edx, 2);
+  jmp(L_2TAG_PACKET_9_0_2);
+
+  bind(L_2TAG_PACKET_4_0_2);
+  movdl(edx, xmm1);
+  psrlq(xmm1, 32);
+  movdl(ecx, xmm1);
+  orl(edx, ecx);
+  cmpl(edx, 0);
+  jcc(Assembler::equal, L_2TAG_PACKET_8_0_2);
+  xorpd(xmm1, xmm1);
+  movl(eax, 18416);
+  pinsrw(xmm1, eax, 3);
+  mulsd(xmm0, xmm1);
+  movapd(xmm1, xmm0);
+  pextrw(eax, xmm0, 3);
+  por(xmm0, xmm2);
+  psllq(xmm0, 5);
+  movl(ecx, 18416);
+  psrlq(xmm0, 34);
+  rcpss(xmm0, xmm0);
+  psllq(xmm1, 12);
+  pshufd(xmm6, xmm5, 228);
+  psrlq(xmm1, 12);
+  jmp(L_2TAG_PACKET_1_0_2);
+
+  bind(L_2TAG_PACKET_2_0_2);
+  movsd(Address(rsp, 24), xmm0);
+  fld_d(Address(rsp, 24));
+
+  bind(L_2TAG_PACKET_10_0_2);
+  movl(tmp, Address(rsp, 40));
+}
+
+/******************************************************************************/
+//                     ALGORITHM DESCRIPTION  - POW()
+//                     ---------------------
+//
+//    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) = NaN.
+//  pow(+1,y) = NaN 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.
+//
+/******************************************************************************/
+
+ALIGNED_(16) juint _static_const_table_pow[] =
+{
+  0x00000000UL, 0xbfd61a00UL, 0x00000000UL, 0xbf5dabe1UL, 0xf8000000UL,
+  0xffffffffUL, 0x00000000UL, 0xfffff800UL, 0x00000000UL, 0x3ff00000UL,
+  0x00000000UL, 0x00000000UL, 0x20000000UL, 0x3feff00aUL, 0x96621f95UL,
+  0x3e5b1856UL, 0xe0000000UL, 0x3fefe019UL, 0xe5916f9eUL, 0xbe325278UL,
+  0x00000000UL, 0x3fefd02fUL, 0x859a1062UL, 0x3e595fb7UL, 0xc0000000UL,
+  0x3fefc049UL, 0xb245f18fUL, 0xbe529c38UL, 0xe0000000UL, 0x3fefb069UL,
+  0xad2880a7UL, 0xbe501230UL, 0x60000000UL, 0x3fefa08fUL, 0xc8e72420UL,
+  0x3e597bd1UL, 0x80000000UL, 0x3fef90baUL, 0xc30c4500UL, 0xbe5d6c75UL,
+  0xe0000000UL, 0x3fef80eaUL, 0x02c63f43UL, 0x3e2e1318UL, 0xc0000000UL,
+  0x3fef7120UL, 0xb3d4ccccUL, 0xbe44c52aUL, 0x00000000UL, 0x3fef615cUL,
+  0xdbd91397UL, 0xbe4e7d6cUL, 0xa0000000UL, 0x3fef519cUL, 0x65c5cd68UL,
+  0xbe522dc8UL, 0xa0000000UL, 0x3fef41e2UL, 0x46d1306cUL, 0xbe5a840eUL,
+  0xe0000000UL, 0x3fef322dUL, 0xd2980e94UL, 0x3e5071afUL, 0xa0000000UL,
+  0x3fef227eUL, 0x773abadeUL, 0xbe5891e5UL, 0xa0000000UL, 0x3fef12d4UL,
+  0xdc6bf46bUL, 0xbe5cccbeUL, 0xe0000000UL, 0x3fef032fUL, 0xbc7247faUL,
+  0xbe2bab83UL, 0x80000000UL, 0x3feef390UL, 0xbcaa1e46UL, 0xbe53bb3bUL,
+  0x60000000UL, 0x3feee3f6UL, 0x5f6c682dUL, 0xbe54c619UL, 0x80000000UL,
+  0x3feed461UL, 0x5141e368UL, 0xbe4b6d86UL, 0xe0000000UL, 0x3feec4d1UL,
+  0xec678f76UL, 0xbe369af6UL, 0x80000000UL, 0x3feeb547UL, 0x41301f55UL,
+  0xbe2d4312UL, 0x60000000UL, 0x3feea5c2UL, 0x676da6bdUL, 0xbe4d8dd0UL,
+  0x60000000UL, 0x3fee9642UL, 0x57a891c4UL, 0x3e51f991UL, 0xa0000000UL,
+  0x3fee86c7UL, 0xe4eb491eUL, 0x3e579bf9UL, 0x20000000UL, 0x3fee7752UL,
+  0xfddc4a2cUL, 0xbe3356e6UL, 0xc0000000UL, 0x3fee67e1UL, 0xd75b5bf1UL,
+  0xbe449531UL, 0x80000000UL, 0x3fee5876UL, 0xbd423b8eUL, 0x3df54fe4UL,
+  0x60000000UL, 0x3fee4910UL, 0x330e51b9UL, 0x3e54289cUL, 0x80000000UL,
+  0x3fee39afUL, 0x8651a95fUL, 0xbe55aad6UL, 0xa0000000UL, 0x3fee2a53UL,
+  0x5e98c708UL, 0xbe2fc4a9UL, 0xe0000000UL, 0x3fee1afcUL, 0x0989328dUL,
+  0x3e23958cUL, 0x40000000UL, 0x3fee0babUL, 0xee642abdUL, 0xbe425dd8UL,
+  0xa0000000UL, 0x3fedfc5eUL, 0xc394d236UL, 0x3e526362UL, 0x20000000UL,
+  0x3feded17UL, 0xe104aa8eUL, 0x3e4ce247UL, 0xc0000000UL, 0x3fedddd4UL,
+  0x265a9be4UL, 0xbe5bb77aUL, 0x40000000UL, 0x3fedce97UL, 0x0ecac52fUL,
+  0x3e4a7cb1UL, 0xe0000000UL, 0x3fedbf5eUL, 0x124cb3b8UL, 0x3e257024UL,
+  0x80000000UL, 0x3fedb02bUL, 0xe6d4febeUL, 0xbe2033eeUL, 0x20000000UL,
+  0x3feda0fdUL, 0x39cca00eUL, 0xbe3ddabcUL, 0xc0000000UL, 0x3fed91d3UL,
+  0xef8a552aUL, 0xbe543390UL, 0x40000000UL, 0x3fed82afUL, 0xb8e85204UL,
+  0x3e513850UL, 0xe0000000UL, 0x3fed738fUL, 0x3d59fe08UL, 0xbe5db728UL,
+  0x40000000UL, 0x3fed6475UL, 0x3aa7ead1UL, 0x3e58804bUL, 0xc0000000UL,
+  0x3fed555fUL, 0xf8a35ba9UL, 0xbe5298b0UL, 0x00000000UL, 0x3fed464fUL,
+  0x9a88dd15UL, 0x3e5a8cdbUL, 0x40000000UL, 0x3fed3743UL, 0xb0b0a190UL,
+  0x3e598635UL, 0x80000000UL, 0x3fed283cUL, 0xe2113295UL, 0xbe5c1119UL,
+  0x80000000UL, 0x3fed193aUL, 0xafbf1728UL, 0xbe492e9cUL, 0x60000000UL,
+  0x3fed0a3dUL, 0xe4a4ccf3UL, 0x3e19b90eUL, 0x20000000UL, 0x3fecfb45UL,
+  0xba3cbeb8UL, 0x3e406b50UL, 0xc0000000UL, 0x3fecec51UL, 0x110f7dddUL,
+  0x3e0d6806UL, 0x40000000UL, 0x3fecdd63UL, 0x7dd7d508UL, 0xbe5a8943UL,
+  0x80000000UL, 0x3fecce79UL, 0x9b60f271UL, 0xbe50676aUL, 0x80000000UL,
+  0x3fecbf94UL, 0x0b9ad660UL, 0x3e59174fUL, 0x60000000UL, 0x3fecb0b4UL,
+  0x00823d9cUL, 0x3e5bbf72UL, 0x20000000UL, 0x3feca1d9UL, 0x38a6ec89UL,
+  0xbe4d38f9UL, 0x80000000UL, 0x3fec9302UL, 0x3a0b7d8eUL, 0x3e53dbfdUL,
+  0xc0000000UL, 0x3fec8430UL, 0xc6826b34UL, 0xbe27c5c9UL, 0xc0000000UL,
+  0x3fec7563UL, 0x0c706381UL, 0xbe593653UL, 0x60000000UL, 0x3fec669bUL,
+  0x7df34ec7UL, 0x3e461ab5UL, 0xe0000000UL, 0x3fec57d7UL, 0x40e5e7e8UL,
+  0xbe5c3daeUL, 0x00000000UL, 0x3fec4919UL, 0x5602770fUL, 0xbe55219dUL,
+  0xc0000000UL, 0x3fec3a5eUL, 0xec7911ebUL, 0x3e5a5d25UL, 0x60000000UL,
+  0x3fec2ba9UL, 0xb39ea225UL, 0xbe53c00bUL, 0x80000000UL, 0x3fec1cf8UL,
+  0x967a212eUL, 0x3e5a8ddfUL, 0x60000000UL, 0x3fec0e4cUL, 0x580798bdUL,
+  0x3e5f53abUL, 0x00000000UL, 0x3febffa5UL, 0xb8282df6UL, 0xbe46b874UL,
+  0x20000000UL, 0x3febf102UL, 0xe33a6729UL, 0x3e54963fUL, 0x00000000UL,
+  0x3febe264UL, 0x3b53e88aUL, 0xbe3adce1UL, 0x60000000UL, 0x3febd3caUL,
+  0xc2585084UL, 0x3e5cde9fUL, 0x80000000UL, 0x3febc535UL, 0xa335c5eeUL,
+  0xbe39fd9cUL, 0x20000000UL, 0x3febb6a5UL, 0x7325b04dUL, 0x3e42ba15UL,
+  0x60000000UL, 0x3feba819UL, 0x1564540fUL, 0x3e3a9f35UL, 0x40000000UL,
+  0x3feb9992UL, 0x83fff592UL, 0xbe5465ceUL, 0xa0000000UL, 0x3feb8b0fUL,
+  0xb9da63d3UL, 0xbe4b1a0aUL, 0x80000000UL, 0x3feb7c91UL, 0x6d6f1ea4UL,
+  0x3e557657UL, 0x00000000UL, 0x3feb6e18UL, 0x5e80a1bfUL, 0x3e4ddbb6UL,
+  0x00000000UL, 0x3feb5fa3UL, 0x1c9eacb5UL, 0x3e592877UL, 0xa0000000UL,
+  0x3feb5132UL, 0x6d40beb3UL, 0xbe51858cUL, 0xa0000000UL, 0x3feb42c6UL,
+  0xd740c67bUL, 0x3e427ad2UL, 0x40000000UL, 0x3feb345fUL, 0xa3e0cceeUL,
+  0xbe5c2fc4UL, 0x40000000UL, 0x3feb25fcUL, 0x8e752b50UL, 0xbe3da3c2UL,
+  0xc0000000UL, 0x3feb179dUL, 0xa892e7deUL, 0x3e1fb481UL, 0xc0000000UL,
+  0x3feb0943UL, 0x21ed71e9UL, 0xbe365206UL, 0x20000000UL, 0x3feafaeeUL,
+  0x0e1380a3UL, 0x3e5c5b7bUL, 0x20000000UL, 0x3feaec9dUL, 0x3c3d640eUL,
+  0xbe5dbbd0UL, 0x60000000UL, 0x3feade50UL, 0x8f97a715UL, 0x3e3a8ec5UL,
+  0x20000000UL, 0x3fead008UL, 0x23ab2839UL, 0x3e2fe98aUL, 0x40000000UL,
+  0x3feac1c4UL, 0xf4bbd50fUL, 0x3e54d8f6UL, 0xe0000000UL, 0x3feab384UL,
+  0x14757c4dUL, 0xbe48774cUL, 0xc0000000UL, 0x3feaa549UL, 0x7c7b0eeaUL,
+  0x3e5b51bbUL, 0x20000000UL, 0x3fea9713UL, 0xf56f7013UL, 0x3e386200UL,
+  0xe0000000UL, 0x3fea88e0UL, 0xbe428ebeUL, 0xbe514af5UL, 0xe0000000UL,
+  0x3fea7ab2UL, 0x8d0e4496UL, 0x3e4f9165UL, 0x60000000UL, 0x3fea6c89UL,
+  0xdbacc5d5UL, 0xbe5c063bUL, 0x20000000UL, 0x3fea5e64UL, 0x3f19d970UL,
+  0xbe5a0c8cUL, 0x20000000UL, 0x3fea5043UL, 0x09ea3e6bUL, 0x3e5065dcUL,
+  0x80000000UL, 0x3fea4226UL, 0x78df246cUL, 0x3e5e05f6UL, 0x40000000UL,
+  0x3fea340eUL, 0x4057d4a0UL, 0x3e431b2bUL, 0x40000000UL, 0x3fea25faUL,
+  0x82867bb5UL, 0x3e4b76beUL, 0xa0000000UL, 0x3fea17eaUL, 0x9436f40aUL,
+  0xbe5aad39UL, 0x20000000UL, 0x3fea09dfUL, 0x4b5253b3UL, 0x3e46380bUL,
+  0x00000000UL, 0x3fe9fbd8UL, 0x8fc52466UL, 0xbe386f9bUL, 0x20000000UL,
+  0x3fe9edd5UL, 0x22d3f344UL, 0xbe538347UL, 0x60000000UL, 0x3fe9dfd6UL,
+  0x1ac33522UL, 0x3e5dbc53UL, 0x00000000UL, 0x3fe9d1dcUL, 0xeabdff1dUL,
+  0x3e40fc0cUL, 0xe0000000UL, 0x3fe9c3e5UL, 0xafd30e73UL, 0xbe585e63UL,
+  0xe0000000UL, 0x3fe9b5f3UL, 0xa52f226aUL, 0xbe43e8f9UL, 0x20000000UL,
+  0x3fe9a806UL, 0xecb8698dUL, 0xbe515b36UL, 0x80000000UL, 0x3fe99a1cUL,
+  0xf2b4e89dUL, 0x3e48b62bUL, 0x20000000UL, 0x3fe98c37UL, 0x7c9a88fbUL,
+  0x3e44414cUL, 0x00000000UL, 0x3fe97e56UL, 0xda015741UL, 0xbe5d13baUL,
+  0xe0000000UL, 0x3fe97078UL, 0x5fdace06UL, 0x3e51b947UL, 0x00000000UL,
+  0x3fe962a0UL, 0x956ca094UL, 0x3e518785UL, 0x40000000UL, 0x3fe954cbUL,
+  0x01164c1dUL, 0x3e5d5b57UL, 0xc0000000UL, 0x3fe946faUL, 0xe63b3767UL,
+  0xbe4f84e7UL, 0x40000000UL, 0x3fe9392eUL, 0xe57cc2a9UL, 0x3e34eda3UL,
+  0xe0000000UL, 0x3fe92b65UL, 0x8c75b544UL, 0x3e5766a0UL, 0xc0000000UL,
+  0x3fe91da1UL, 0x37d1d087UL, 0xbe5e2ab1UL, 0x80000000UL, 0x3fe90fe1UL,
+  0xa953dc20UL, 0x3e5fa1f3UL, 0x80000000UL, 0x3fe90225UL, 0xdbd3f369UL,
+  0x3e47d6dbUL, 0xa0000000UL, 0x3fe8f46dUL, 0x1c9be989UL, 0xbe5e2b0aUL,
+  0xa0000000UL, 0x3fe8e6b9UL, 0x3c93d76aUL, 0x3e5c8618UL, 0xe0000000UL,
+  0x3fe8d909UL, 0x2182fc9aUL, 0xbe41aa9eUL, 0x20000000UL, 0x3fe8cb5eUL,
+  0xe6b3539dUL, 0xbe530d19UL, 0x60000000UL, 0x3fe8bdb6UL, 0x49e58cc3UL,
+  0xbe3bb374UL, 0xa0000000UL, 0x3fe8b012UL, 0xa7cfeb8fUL, 0x3e56c412UL,
+  0x00000000UL, 0x3fe8a273UL, 0x8d52bc19UL, 0x3e1429b8UL, 0x60000000UL,
+  0x3fe894d7UL, 0x4dc32c6cUL, 0xbe48604cUL, 0xc0000000UL, 0x3fe8873fUL,
+  0x0c868e56UL, 0xbe564ee5UL, 0x00000000UL, 0x3fe879acUL, 0x56aee828UL,
+  0x3e5e2fd8UL, 0x60000000UL, 0x3fe86c1cUL, 0x7ceab8ecUL, 0x3e493365UL,
+  0xc0000000UL, 0x3fe85e90UL, 0x78d4dadcUL, 0xbe4f7f25UL, 0x00000000UL,
+  0x3fe85109UL, 0x0ccd8280UL, 0x3e31e7a2UL, 0x40000000UL, 0x3fe84385UL,
+  0x34ba4e15UL, 0x3e328077UL, 0x80000000UL, 0x3fe83605UL, 0xa670975aUL,
+  0xbe53eee5UL, 0xa0000000UL, 0x3fe82889UL, 0xf61b77b2UL, 0xbe43a20aUL,
+  0xa0000000UL, 0x3fe81b11UL, 0x13e6643bUL, 0x3e5e5fe5UL, 0xc0000000UL,
+  0x3fe80d9dUL, 0x82cc94e8UL, 0xbe5ff1f9UL, 0xa0000000UL, 0x3fe8002dUL,
+  0x8a0c9c5dUL, 0xbe42b0e7UL, 0x60000000UL, 0x3fe7f2c1UL, 0x22a16f01UL,
+  0x3e5d9ea0UL, 0x20000000UL, 0x3fe7e559UL, 0xc38cd451UL, 0x3e506963UL,
+  0xc0000000UL, 0x3fe7d7f4UL, 0x9902bc71UL, 0x3e4503d7UL, 0x40000000UL,
+  0x3fe7ca94UL, 0xdef2a3c0UL, 0x3e3d98edUL, 0xa0000000UL, 0x3fe7bd37UL,
+  0xed49abb0UL, 0x3e24c1ffUL, 0xe0000000UL, 0x3fe7afdeUL, 0xe3b0be70UL,
+  0xbe40c467UL, 0x00000000UL, 0x3fe7a28aUL, 0xaf9f193cUL, 0xbe5dff6cUL,
+  0xe0000000UL, 0x3fe79538UL, 0xb74cf6b6UL, 0xbe258ed0UL, 0xa0000000UL,
+  0x3fe787ebUL, 0x1d9127c7UL, 0x3e345fb0UL, 0x40000000UL, 0x3fe77aa2UL,
+  0x1028c21dUL, 0xbe4619bdUL, 0xa0000000UL, 0x3fe76d5cUL, 0x7cb0b5e4UL,
+  0x3e40f1a2UL, 0xe0000000UL, 0x3fe7601aUL, 0x2b1bc4adUL, 0xbe32e8bbUL,
+  0xe0000000UL, 0x3fe752dcUL, 0x6839f64eUL, 0x3e41f57bUL, 0xc0000000UL,
+  0x3fe745a2UL, 0xc4121f7eUL, 0xbe52c40aUL, 0x60000000UL, 0x3fe7386cUL,
+  0xd6852d72UL, 0xbe5c4e6bUL, 0xc0000000UL, 0x3fe72b39UL, 0x91d690f7UL,
+  0xbe57f88fUL, 0xe0000000UL, 0x3fe71e0aUL, 0x627a2159UL, 0xbe4425d5UL,
+  0xc0000000UL, 0x3fe710dfUL, 0x50a54033UL, 0x3e422b7eUL, 0x60000000UL,
+  0x3fe703b8UL, 0x3b0b5f91UL, 0x3e5d3857UL, 0xe0000000UL, 0x3fe6f694UL,
+  0x84d628a2UL, 0xbe51f090UL, 0x00000000UL, 0x3fe6e975UL, 0x306d8894UL,
+  0xbe414d83UL, 0xe0000000UL, 0x3fe6dc58UL, 0x30bf24aaUL, 0xbe4650caUL,
+  0x80000000UL, 0x3fe6cf40UL, 0xd4628d69UL, 0xbe5db007UL, 0xc0000000UL,
+  0x3fe6c22bUL, 0xa2aae57bUL, 0xbe31d279UL, 0xc0000000UL, 0x3fe6b51aUL,
+  0x860edf7eUL, 0xbe2d4c4aUL, 0x80000000UL, 0x3fe6a80dUL, 0xf3559341UL,
+  0xbe5f7e98UL, 0xe0000000UL, 0x3fe69b03UL, 0xa885899eUL, 0xbe5c2011UL,
+  0xe0000000UL, 0x3fe68dfdUL, 0x2bdc6d37UL, 0x3e224a82UL, 0xa0000000UL,
+  0x3fe680fbUL, 0xc12ad1b9UL, 0xbe40cf56UL, 0x00000000UL, 0x3fe673fdUL,
+  0x1bcdf659UL, 0xbdf52f2dUL, 0x00000000UL, 0x3fe66702UL, 0x5df10408UL,
+  0x3e5663e0UL, 0xc0000000UL, 0x3fe65a0aUL, 0xa4070568UL, 0xbe40b12fUL,
+  0x00000000UL, 0x3fe64d17UL, 0x71c54c47UL, 0x3e5f5e8bUL, 0x00000000UL,
+  0x3fe64027UL, 0xbd4b7e83UL, 0x3e42ead6UL, 0xa0000000UL, 0x3fe6333aUL,
+  0x61598bd2UL, 0xbe4c48d4UL, 0xc0000000UL, 0x3fe62651UL, 0x6f538d61UL,
+  0x3e548401UL, 0xa0000000UL, 0x3fe6196cUL, 0x14344120UL, 0xbe529af6UL,
+  0x00000000UL, 0x3fe60c8bUL, 0x5982c587UL, 0xbe3e1e4fUL, 0x00000000UL,
+  0x3fe5ffadUL, 0xfe51d4eaUL, 0xbe4c897aUL, 0x80000000UL, 0x3fe5f2d2UL,
+  0xfd46ebe1UL, 0x3e552e00UL, 0xa0000000UL, 0x3fe5e5fbUL, 0xa4695699UL,
+  0x3e5ed471UL, 0x60000000UL, 0x3fe5d928UL, 0x80d118aeUL, 0x3e456b61UL,
+  0xa0000000UL, 0x3fe5cc58UL, 0x304c330bUL, 0x3e54dc29UL, 0x80000000UL,
+  0x3fe5bf8cUL, 0x0af2dedfUL, 0xbe3aa9bdUL, 0xe0000000UL, 0x3fe5b2c3UL,
+  0x15fc9258UL, 0xbe479a37UL, 0xc0000000UL, 0x3fe5a5feUL, 0x9292c7eaUL,
+  0x3e188650UL, 0x20000000UL, 0x3fe5993dUL, 0x33b4d380UL, 0x3e5d6d93UL,
+  0x20000000UL, 0x3fe58c7fUL, 0x02fd16c7UL, 0x3e2fe961UL, 0xa0000000UL,
+  0x3fe57fc4UL, 0x4a05edb6UL, 0xbe4d55b4UL, 0xa0000000UL, 0x3fe5730dUL,
+  0x3d443abbUL, 0xbe5e6954UL, 0x00000000UL, 0x3fe5665aUL, 0x024acfeaUL,
+  0x3e50e61bUL, 0x00000000UL, 0x3fe559aaUL, 0xcc9edd09UL, 0xbe325403UL,
+  0x60000000UL, 0x3fe54cfdUL, 0x1fe26950UL, 0x3e5d500eUL, 0x60000000UL,
+  0x3fe54054UL, 0x6c5ae164UL, 0xbe4a79b4UL, 0xc0000000UL, 0x3fe533aeUL,
+  0x154b0287UL, 0xbe401571UL, 0xa0000000UL, 0x3fe5270cUL, 0x0673f401UL,
+  0xbe56e56bUL, 0xe0000000UL, 0x3fe51a6dUL, 0x751b639cUL, 0x3e235269UL,
+  0xa0000000UL, 0x3fe50dd2UL, 0x7c7b2bedUL, 0x3ddec887UL, 0xc0000000UL,
+  0x3fe5013aUL, 0xafab4e17UL, 0x3e5e7575UL, 0x60000000UL, 0x3fe4f4a6UL,
+  0x2e308668UL, 0x3e59aed6UL, 0x80000000UL, 0x3fe4e815UL, 0xf33e2a76UL,
+  0xbe51f184UL, 0xe0000000UL, 0x3fe4db87UL, 0x839f3e3eUL, 0x3e57db01UL,
+  0xc0000000UL, 0x3fe4cefdUL, 0xa9eda7bbUL, 0x3e535e0fUL, 0x00000000UL,
+  0x3fe4c277UL, 0x2a8f66a5UL, 0x3e5ce451UL, 0xc0000000UL, 0x3fe4b5f3UL,
+  0x05192456UL, 0xbe4e8518UL, 0xc0000000UL, 0x3fe4a973UL, 0x4aa7cd1dUL,
+  0x3e46784aUL, 0x40000000UL, 0x3fe49cf7UL, 0x8e23025eUL, 0xbe5749f2UL,
+  0x00000000UL, 0x3fe4907eUL, 0x18d30215UL, 0x3e360f39UL, 0x20000000UL,
+  0x3fe48408UL, 0x63dcf2f3UL, 0x3e5e00feUL, 0xc0000000UL, 0x3fe47795UL,
+  0x46182d09UL, 0xbe5173d9UL, 0xa0000000UL, 0x3fe46b26UL, 0x8f0e62aaUL,
+  0xbe48f281UL, 0xe0000000UL, 0x3fe45ebaUL, 0x5775c40cUL, 0xbe56aad4UL,
+  0x60000000UL, 0x3fe45252UL, 0x0fe25f69UL, 0x3e48bd71UL, 0x40000000UL,
+  0x3fe445edUL, 0xe9989ec5UL, 0x3e590d97UL, 0x80000000UL, 0x3fe4398bUL,
+  0xb3d9ffe3UL, 0x3e479dbcUL, 0x20000000UL, 0x3fe42d2dUL, 0x388e4d2eUL,
+  0xbe5eed80UL, 0xe0000000UL, 0x3fe420d1UL, 0x6f797c18UL, 0x3e554b4cUL,
+  0x20000000UL, 0x3fe4147aUL, 0x31048bb4UL, 0xbe5b1112UL, 0x80000000UL,
+  0x3fe40825UL, 0x2efba4f9UL, 0x3e48ebc7UL, 0x40000000UL, 0x3fe3fbd4UL,
+  0x50201119UL, 0x3e40b701UL, 0x40000000UL, 0x3fe3ef86UL, 0x0a4db32cUL,
+  0x3e551de8UL, 0xa0000000UL, 0x3fe3e33bUL, 0x0c9c148bUL, 0xbe50c1f6UL,
+  0x20000000UL, 0x3fe3d6f4UL, 0xc9129447UL, 0x3e533fa0UL, 0x00000000UL,
+  0x3fe3cab0UL, 0xaae5b5a0UL, 0xbe22b68eUL, 0x20000000UL, 0x3fe3be6fUL,
+  0x02305e8aUL, 0xbe54fc08UL, 0x60000000UL, 0x3fe3b231UL, 0x7f908258UL,
+  0x3e57dc05UL, 0x00000000UL, 0x3fe3a5f7UL, 0x1a09af78UL, 0x3e08038bUL,
+  0xe0000000UL, 0x3fe399bfUL, 0x490643c1UL, 0xbe5dbe42UL, 0xe0000000UL,
+  0x3fe38d8bUL, 0x5e8ad724UL, 0xbe3c2b72UL, 0x20000000UL, 0x3fe3815bUL,
+  0xc67196b6UL, 0x3e1713cfUL, 0xa0000000UL, 0x3fe3752dUL, 0x6182e429UL,
+  0xbe3ec14cUL, 0x40000000UL, 0x3fe36903UL, 0xab6eb1aeUL, 0x3e5a2cc5UL,
+  0x40000000UL, 0x3fe35cdcUL, 0xfe5dc064UL, 0xbe5c5878UL, 0x40000000UL,
+  0x3fe350b8UL, 0x0ba6b9e4UL, 0x3e51619bUL, 0x80000000UL, 0x3fe34497UL,
+  0x857761aaUL, 0x3e5fff53UL, 0x00000000UL, 0x3fe3387aUL, 0xf872d68cUL,
+  0x3e484f4dUL, 0xa0000000UL, 0x3fe32c5fUL, 0x087e97c2UL, 0x3e52842eUL,
+  0x80000000UL, 0x3fe32048UL, 0x73d6d0c0UL, 0xbe503edfUL, 0x80000000UL,
+  0x3fe31434UL, 0x0c1456a1UL, 0xbe5f72adUL, 0xa0000000UL, 0x3fe30823UL,
+  0x83a1a4d5UL, 0xbe5e65ccUL, 0xe0000000UL, 0x3fe2fc15UL, 0x855a7390UL,
+  0xbe506438UL, 0x40000000UL, 0x3fe2f00bUL, 0xa2898287UL, 0x3e3d22a2UL,
+  0xe0000000UL, 0x3fe2e403UL, 0x8b56f66fUL, 0xbe5aa5fdUL, 0x80000000UL,
+  0x3fe2d7ffUL, 0x52db119aUL, 0x3e3a2e3dUL, 0x60000000UL, 0x3fe2cbfeUL,
+  0xe2ddd4c0UL, 0xbe586469UL, 0x40000000UL, 0x3fe2c000UL, 0x6b01bf10UL,
+  0x3e352b9dUL, 0x40000000UL, 0x3fe2b405UL, 0xb07a1cdfUL, 0x3e5c5cdaUL,
+  0x80000000UL, 0x3fe2a80dUL, 0xc7b5f868UL, 0xbe5668b3UL, 0xc0000000UL,
+  0x3fe29c18UL, 0x185edf62UL, 0xbe563d66UL, 0x00000000UL, 0x3fe29027UL,
+  0xf729e1ccUL, 0x3e59a9a0UL, 0x80000000UL, 0x3fe28438UL, 0x6433c727UL,
+  0xbe43cc89UL, 0x00000000UL, 0x3fe2784dUL, 0x41782631UL, 0xbe30750cUL,
+  0xa0000000UL, 0x3fe26c64UL, 0x914911b7UL, 0xbe58290eUL, 0x40000000UL,
+  0x3fe2607fUL, 0x3dcc73e1UL, 0xbe4269cdUL, 0x00000000UL, 0x3fe2549dUL,
+  0x2751bf70UL, 0xbe5a6998UL, 0xc0000000UL, 0x3fe248bdUL, 0x4248b9fbUL,
+  0xbe4ddb00UL, 0x80000000UL, 0x3fe23ce1UL, 0xf35cf82fUL, 0x3e561b71UL,
+  0x60000000UL, 0x3fe23108UL, 0x8e481a2dUL, 0x3e518fb9UL, 0x60000000UL,
+  0x3fe22532UL, 0x5ab96edcUL, 0xbe5fafc5UL, 0x40000000UL, 0x3fe2195fUL,
+  0x80943911UL, 0xbe07f819UL, 0x40000000UL, 0x3fe20d8fUL, 0x386f2d6cUL,
+  0xbe54ba8bUL, 0x40000000UL, 0x3fe201c2UL, 0xf29664acUL, 0xbe5eb815UL,
+  0x20000000UL, 0x3fe1f5f8UL, 0x64f03390UL, 0x3e5e320cUL, 0x20000000UL,
+  0x3fe1ea31UL, 0x747ff696UL, 0x3e5ef0a5UL, 0x40000000UL, 0x3fe1de6dUL,
+  0x3e9ceb51UL, 0xbe5f8d27UL, 0x20000000UL, 0x3fe1d2acUL, 0x4ae0b55eUL,
+  0x3e5faa21UL, 0x20000000UL, 0x3fe1c6eeUL, 0x28569a5eUL, 0x3e598a4fUL,
+  0x20000000UL, 0x3fe1bb33UL, 0x54b33e07UL, 0x3e46130aUL, 0x20000000UL,
+  0x3fe1af7bUL, 0x024f1078UL, 0xbe4dbf93UL, 0x00000000UL, 0x3fe1a3c6UL,
+  0xb0783bfaUL, 0x3e419248UL, 0xe0000000UL, 0x3fe19813UL, 0x2f02b836UL,
+  0x3e4e02b7UL, 0xc0000000UL, 0x3fe18c64UL, 0x28dec9d4UL, 0x3e09064fUL,
+  0x80000000UL, 0x3fe180b8UL, 0x45cbf406UL, 0x3e5b1f46UL, 0x40000000UL,
+  0x3fe1750fUL, 0x03d9964cUL, 0x3e5b0a79UL, 0x00000000UL, 0x3fe16969UL,
+  0x8b5b882bUL, 0xbe238086UL, 0xa0000000UL, 0x3fe15dc5UL, 0x73bad6f8UL,
+  0xbdf1fca4UL, 0x20000000UL, 0x3fe15225UL, 0x5385769cUL, 0x3e5e8d76UL,
+  0xa0000000UL, 0x3fe14687UL, 0x1676dc6bUL, 0x3e571d08UL, 0x20000000UL,
+  0x3fe13aedUL, 0xa8c41c7fUL, 0xbe598a25UL, 0x60000000UL, 0x3fe12f55UL,
+  0xc4e1aaf0UL, 0x3e435277UL, 0xa0000000UL, 0x3fe123c0UL, 0x403638e1UL,
+  0xbe21aa7cUL, 0xc0000000UL, 0x3fe1182eUL, 0x557a092bUL, 0xbdd0116bUL,
+  0xc0000000UL, 0x3fe10c9fUL, 0x7d779f66UL, 0x3e4a61baUL, 0xc0000000UL,
+  0x3fe10113UL, 0x2b09c645UL, 0xbe5d586eUL, 0x20000000UL, 0x3fe0ea04UL,
+  0xea2cad46UL, 0x3e5aa97cUL, 0x20000000UL, 0x3fe0d300UL, 0x23190e54UL,
+  0x3e50f1a7UL, 0xa0000000UL, 0x3fe0bc07UL, 0x1379a5a6UL, 0xbe51619dUL,
+  0x60000000UL, 0x3fe0a51aUL, 0x926a3d4aUL, 0x3e5cf019UL, 0xa0000000UL,
+  0x3fe08e38UL, 0xa8c24358UL, 0x3e35241eUL, 0x20000000UL, 0x3fe07762UL,
+  0x24317e7aUL, 0x3e512cfaUL, 0x00000000UL, 0x3fe06097UL, 0xfd9cf274UL,
+  0xbe55bef3UL, 0x00000000UL, 0x3fe049d7UL, 0x3689b49dUL, 0xbe36d26dUL,
+  0x40000000UL, 0x3fe03322UL, 0xf72ef6c4UL, 0xbe54cd08UL, 0xa0000000UL,
+  0x3fe01c78UL, 0x23702d2dUL, 0xbe5900bfUL, 0x00000000UL, 0x3fe005daUL,
+  0x3f59c14cUL, 0x3e57d80bUL, 0x40000000UL, 0x3fdfde8dUL, 0xad67766dUL,
+  0xbe57fad4UL, 0x40000000UL, 0x3fdfb17cUL, 0x644f4ae7UL, 0x3e1ee43bUL,
+  0x40000000UL, 0x3fdf8481UL, 0x903234d2UL, 0x3e501a86UL, 0x40000000UL,
+  0x3fdf579cUL, 0xafe9e509UL, 0xbe267c3eUL, 0x00000000UL, 0x3fdf2acdUL,
+  0xb7dfda0bUL, 0xbe48149bUL, 0x40000000UL, 0x3fdefe13UL, 0x3b94305eUL,
+  0x3e5f4ea7UL, 0x80000000UL, 0x3fded16fUL, 0x5d95da61UL, 0xbe55c198UL,
+  0x00000000UL, 0x3fdea4e1UL, 0x406960c9UL, 0xbdd99a19UL, 0x00000000UL,
+  0x3fde7868UL, 0xd22f3539UL, 0x3e470c78UL, 0x80000000UL, 0x3fde4c04UL,
+  0x83eec535UL, 0xbe3e1232UL, 0x40000000UL, 0x3fde1fb6UL, 0x3dfbffcbUL,
+  0xbe4b7d71UL, 0x40000000UL, 0x3fddf37dUL, 0x7e1be4e0UL, 0xbe5b8f8fUL,
+  0x40000000UL, 0x3fddc759UL, 0x46dae887UL, 0xbe350458UL, 0x80000000UL,
+  0x3fdd9b4aUL, 0xed6ecc49UL, 0xbe5f0045UL, 0x80000000UL, 0x3fdd6f50UL,
+  0x2e9e883cUL, 0x3e2915daUL, 0x80000000UL, 0x3fdd436bUL, 0xf0bccb32UL,
+  0x3e4a68c9UL, 0x80000000UL, 0x3fdd179bUL, 0x9bbfc779UL, 0xbe54a26aUL,
+  0x00000000UL, 0x3fdcebe0UL, 0x7cea33abUL, 0x3e43c6b7UL, 0x40000000UL,
+  0x3fdcc039UL, 0xe740fd06UL, 0x3e5526c2UL, 0x40000000UL, 0x3fdc94a7UL,
+  0x9eadeb1aUL, 0xbe396d8dUL, 0xc0000000UL, 0x3fdc6929UL, 0xf0a8f95aUL,
+  0xbe5c0ab2UL, 0x80000000UL, 0x3fdc3dc0UL, 0x6ee2693bUL, 0x3e0992e6UL,
+  0xc0000000UL, 0x3fdc126bUL, 0x5ac6b581UL, 0xbe2834b6UL, 0x40000000UL,
+  0x3fdbe72bUL, 0x8cc226ffUL, 0x3e3596a6UL, 0x00000000UL, 0x3fdbbbffUL,
+  0xf92a74bbUL, 0x3e3c5813UL, 0x00000000UL, 0x3fdb90e7UL, 0x479664c0UL,
+  0xbe50d644UL, 0x00000000UL, 0x3fdb65e3UL, 0x5004975bUL, 0xbe55258fUL,
+  0x00000000UL, 0x3fdb3af3UL, 0xe4b23194UL, 0xbe588407UL, 0xc0000000UL,
+  0x3fdb1016UL, 0xe65d4d0aUL, 0x3e527c26UL, 0x80000000UL, 0x3fdae54eUL,
+  0x814fddd6UL, 0x3e5962a2UL, 0x40000000UL, 0x3fdaba9aUL, 0xe19d0913UL,
+  0xbe562f4eUL, 0x80000000UL, 0x3fda8ff9UL, 0x43cfd006UL, 0xbe4cfdebUL,
+  0x40000000UL, 0x3fda656cUL, 0x686f0a4eUL, 0x3e5e47a8UL, 0xc0000000UL,
+  0x3fda3af2UL, 0x7200d410UL, 0x3e5e1199UL, 0xc0000000UL, 0x3fda108cUL,
+  0xabd2266eUL, 0x3e5ee4d1UL, 0x40000000UL, 0x3fd9e63aUL, 0x396f8f2cUL,
+  0x3e4dbffbUL, 0x00000000UL, 0x3fd9bbfbUL, 0xe32b25ddUL, 0x3e5c3a54UL,
+  0x40000000UL, 0x3fd991cfUL, 0x431e4035UL, 0xbe457925UL, 0x80000000UL,
+  0x3fd967b6UL, 0x7bed3dd3UL, 0x3e40c61dUL, 0x00000000UL, 0x3fd93db1UL,
+  0xd7449365UL, 0x3e306419UL, 0x80000000UL, 0x3fd913beUL, 0x1746e791UL,
+  0x3e56fcfcUL, 0x40000000UL, 0x3fd8e9dfUL, 0xf3a9028bUL, 0xbe5041b9UL,
+  0xc0000000UL, 0x3fd8c012UL, 0x56840c50UL, 0xbe26e20aUL, 0x40000000UL,
+  0x3fd89659UL, 0x19763102UL, 0xbe51f466UL, 0x80000000UL, 0x3fd86cb2UL,
+  0x7032de7cUL, 0xbe4d298aUL, 0x80000000UL, 0x3fd8431eUL, 0xdeb39fabUL,
+  0xbe4361ebUL, 0x40000000UL, 0x3fd8199dUL, 0x5d01cbe0UL, 0xbe5425b3UL,
+  0x80000000UL, 0x3fd7f02eUL, 0x3ce99aa9UL, 0x3e146fa8UL, 0x80000000UL,
+  0x3fd7c6d2UL, 0xd1a262b9UL, 0xbe5a1a69UL, 0xc0000000UL, 0x3fd79d88UL,
+  0x8606c236UL, 0x3e423a08UL, 0x80000000UL, 0x3fd77451UL, 0x8fd1e1b7UL,
+  0x3e5a6a63UL, 0xc0000000UL, 0x3fd74b2cUL, 0xe491456aUL, 0x3e42c1caUL,
+  0x40000000UL, 0x3fd7221aUL, 0x4499a6d7UL, 0x3e36a69aUL, 0x00000000UL,
+  0x3fd6f91aUL, 0x5237df94UL, 0xbe0f8f02UL, 0x00000000UL, 0x3fd6d02cUL,
+  0xb6482c6eUL, 0xbe5abcf7UL, 0x00000000UL, 0x3fd6a750UL, 0x1919fd61UL,
+  0xbe57ade2UL, 0x00000000UL, 0x3fd67e86UL, 0xaa7a994dUL, 0xbe3f3fbdUL,
+  0x00000000UL, 0x3fd655ceUL, 0x67db014cUL, 0x3e33c550UL, 0x00000000UL,
+  0x3fd62d28UL, 0xa82856b7UL, 0xbe1409d1UL, 0xc0000000UL, 0x3fd60493UL,
+  0x1e6a300dUL, 0x3e55d899UL, 0x80000000UL, 0x3fd5dc11UL, 0x1222bd5cUL,
+  0xbe35bfc0UL, 0xc0000000UL, 0x3fd5b3a0UL, 0x6e8dc2d3UL, 0x3e5d4d79UL,
+  0x00000000UL, 0x3fd58b42UL, 0xe0e4ace6UL, 0xbe517303UL, 0x80000000UL,
+  0x3fd562f4UL, 0xb306e0a8UL, 0x3e5edf0fUL, 0xc0000000UL, 0x3fd53ab8UL,
+  0x6574bc54UL, 0x3e5ee859UL, 0x80000000UL, 0x3fd5128eUL, 0xea902207UL,
+  0x3e5f6188UL, 0xc0000000UL, 0x3fd4ea75UL, 0x9f911d79UL, 0x3e511735UL,
+  0x80000000UL, 0x3fd4c26eUL, 0xf9c77397UL, 0xbe5b1643UL, 0x40000000UL,
+  0x3fd49a78UL, 0x15fc9258UL, 0x3e479a37UL, 0x80000000UL, 0x3fd47293UL,
+  0xd5a04dd9UL, 0xbe426e56UL, 0xc0000000UL, 0x3fd44abfUL, 0xe04042f5UL,
+  0x3e56f7c6UL, 0x40000000UL, 0x3fd422fdUL, 0x1d8bf2c8UL, 0x3e5d8810UL,
+  0x00000000UL, 0x3fd3fb4cUL, 0x88a8ddeeUL, 0xbe311454UL, 0xc0000000UL,
+  0x3fd3d3abUL, 0x3e3b5e47UL, 0xbe5d1b72UL, 0x40000000UL, 0x3fd3ac1cUL,
+  0xc2ab5d59UL, 0x3e31b02bUL, 0xc0000000UL, 0x3fd3849dUL, 0xd4e34b9eUL,
+  0x3e51cb2fUL, 0x40000000UL, 0x3fd35d30UL, 0x177204fbUL, 0xbe2b8cd7UL,
+  0x80000000UL, 0x3fd335d3UL, 0xfcd38c82UL, 0xbe4356e1UL, 0x80000000UL,
+  0x3fd30e87UL, 0x64f54accUL, 0xbe4e6224UL, 0x00000000UL, 0x3fd2e74cUL,
+  0xaa7975d9UL, 0x3e5dc0feUL, 0x80000000UL, 0x3fd2c021UL, 0x516dab3fUL,
+  0xbe50ffa3UL, 0x40000000UL, 0x3fd29907UL, 0x2bfb7313UL, 0x3e5674a2UL,
+  0xc0000000UL, 0x3fd271fdUL, 0x0549fc99UL, 0x3e385d29UL, 0xc0000000UL,
+  0x3fd24b04UL, 0x55b63073UL, 0xbe500c6dUL, 0x00000000UL, 0x3fd2241cUL,
+  0x3f91953aUL, 0x3e389977UL, 0xc0000000UL, 0x3fd1fd43UL, 0xa1543f71UL,
+  0xbe3487abUL, 0xc0000000UL, 0x3fd1d67bUL, 0x4ec8867cUL, 0x3df6a2dcUL,
+  0x00000000UL, 0x3fd1afc4UL, 0x4328e3bbUL, 0x3e41d9c0UL, 0x80000000UL,
+  0x3fd1891cUL, 0x2e1cda84UL, 0x3e3bdd87UL, 0x40000000UL, 0x3fd16285UL,
+  0x4b5331aeUL, 0xbe53128eUL, 0x00000000UL, 0x3fd13bfeUL, 0xb9aec164UL,
+  0xbe52ac98UL, 0xc0000000UL, 0x3fd11586UL, 0xd91e1316UL, 0xbe350630UL,
+  0x80000000UL, 0x3fd0ef1fUL, 0x7cacc12cUL, 0x3e3f5219UL, 0x40000000UL,
+  0x3fd0c8c8UL, 0xbce277b7UL, 0x3e3d30c0UL, 0x00000000UL, 0x3fd0a281UL,
+  0x2a63447dUL, 0xbe541377UL, 0x80000000UL, 0x3fd07c49UL, 0xfac483b5UL,
+  0xbe5772ecUL, 0xc0000000UL, 0x3fd05621UL, 0x36b8a570UL, 0xbe4fd4bdUL,
+  0xc0000000UL, 0x3fd03009UL, 0xbae505f7UL, 0xbe450388UL, 0x80000000UL,
+  0x3fd00a01UL, 0x3e35aeadUL, 0xbe5430fcUL, 0x80000000UL, 0x3fcfc811UL,
+  0x707475acUL, 0x3e38806eUL, 0x80000000UL, 0x3fcf7c3fUL, 0xc91817fcUL,
+  0xbe40cceaUL, 0x80000000UL, 0x3fcf308cUL, 0xae05d5e9UL, 0xbe4919b8UL,
+  0x80000000UL, 0x3fcee4f8UL, 0xae6cc9e6UL, 0xbe530b94UL, 0x00000000UL,
+  0x3fce9983UL, 0x1efe3e8eUL, 0x3e57747eUL, 0x00000000UL, 0x3fce4e2dUL,
+  0xda78d9bfUL, 0xbe59a608UL, 0x00000000UL, 0x3fce02f5UL, 0x8abe2c2eUL,
+  0x3e4a35adUL, 0x00000000UL, 0x3fcdb7dcUL, 0x1495450dUL, 0xbe0872ccUL,
+  0x80000000UL, 0x3fcd6ce1UL, 0x86ee0ba0UL, 0xbe4f59a0UL, 0x00000000UL,
+  0x3fcd2205UL, 0xe81ca888UL, 0x3e5402c3UL, 0x00000000UL, 0x3fccd747UL,
+  0x3b4424b9UL, 0x3e5dfdc3UL, 0x80000000UL, 0x3fcc8ca7UL, 0xd305b56cUL,
+  0x3e202da6UL, 0x00000000UL, 0x3fcc4226UL, 0x399a6910UL, 0xbe482a1cUL,
+  0x80000000UL, 0x3fcbf7c2UL, 0x747f7938UL, 0xbe587372UL, 0x80000000UL,
+  0x3fcbad7cUL, 0x6fc246a0UL, 0x3e50d83dUL, 0x00000000UL, 0x3fcb6355UL,
+  0xee9e9be5UL, 0xbe5c35bdUL, 0x80000000UL, 0x3fcb194aUL, 0x8416c0bcUL,
+  0x3e546d4fUL, 0x00000000UL, 0x3fcacf5eUL, 0x49f7f08fUL, 0x3e56da76UL,
+  0x00000000UL, 0x3fca858fUL, 0x5dc30de2UL, 0x3e5f390cUL, 0x00000000UL,
+  0x3fca3bdeUL, 0x950583b6UL, 0xbe5e4169UL, 0x80000000UL, 0x3fc9f249UL,
+  0x33631553UL, 0x3e52aeb1UL, 0x00000000UL, 0x3fc9a8d3UL, 0xde8795a6UL,
+  0xbe59a504UL, 0x00000000UL, 0x3fc95f79UL, 0x076bf41eUL, 0x3e5122feUL,
+  0x80000000UL, 0x3fc9163cUL, 0x2914c8e7UL, 0x3e3dd064UL, 0x00000000UL,
+  0x3fc8cd1dUL, 0x3a30eca3UL, 0xbe21b4aaUL, 0x80000000UL, 0x3fc8841aUL,
+  0xb2a96650UL, 0xbe575444UL, 0x80000000UL, 0x3fc83b34UL, 0x2376c0cbUL,
+  0xbe2a74c7UL, 0x80000000UL, 0x3fc7f26bUL, 0xd8a0b653UL, 0xbe5181b6UL,
+  0x00000000UL, 0x3fc7a9bfUL, 0x32257882UL, 0xbe4a78b4UL, 0x00000000UL,
+  0x3fc7612fUL, 0x1eee8bd9UL, 0xbe1bfe9dUL, 0x80000000UL, 0x3fc718bbUL,
+  0x0c603cc4UL, 0x3e36fdc9UL, 0x80000000UL, 0x3fc6d064UL, 0x3728b8cfUL,
+  0xbe1e542eUL, 0x80000000UL, 0x3fc68829UL, 0xc79a4067UL, 0x3e5c380fUL,
+  0x00000000UL, 0x3fc6400bUL, 0xf69eac69UL, 0x3e550a84UL, 0x80000000UL,
+  0x3fc5f808UL, 0xb7a780a4UL, 0x3e5d9224UL, 0x80000000UL, 0x3fc5b022UL,
+  0xad9dfb1eUL, 0xbe55242fUL, 0x00000000UL, 0x3fc56858UL, 0x659b18beUL,
+  0xbe4bfda3UL, 0x80000000UL, 0x3fc520a9UL, 0x66ee3631UL, 0xbe57d769UL,
+  0x80000000UL, 0x3fc4d916UL, 0x1ec62819UL, 0x3e2427f7UL, 0x80000000UL,
+  0x3fc4919fUL, 0xdec25369UL, 0xbe435431UL, 0x00000000UL, 0x3fc44a44UL,
+  0xa8acfc4bUL, 0xbe3c62e8UL, 0x00000000UL, 0x3fc40304UL, 0xcf1d3eabUL,
+  0xbdfba29fUL, 0x80000000UL, 0x3fc3bbdfUL, 0x79aba3eaUL, 0xbdf1b7c8UL,
+  0x80000000UL, 0x3fc374d6UL, 0xb8d186daUL, 0xbe5130cfUL, 0x80000000UL,
+  0x3fc32de8UL, 0x9d74f152UL, 0x3e2285b6UL, 0x00000000UL, 0x3fc2e716UL,
+  0x50ae7ca9UL, 0xbe503920UL, 0x80000000UL, 0x3fc2a05eUL, 0x6caed92eUL,
+  0xbe533924UL, 0x00000000UL, 0x3fc259c2UL, 0x9cb5034eUL, 0xbe510e31UL,
+  0x80000000UL, 0x3fc21340UL, 0x12c4d378UL, 0xbe540b43UL, 0x80000000UL,
+  0x3fc1ccd9UL, 0xcc418706UL, 0x3e59887aUL, 0x00000000UL, 0x3fc1868eUL,
+  0x921f4106UL, 0xbe528e67UL, 0x80000000UL, 0x3fc1405cUL, 0x3969441eUL,
+  0x3e5d8051UL, 0x00000000UL, 0x3fc0fa46UL, 0xd941ef5bUL, 0x3e5f9079UL,
+  0x80000000UL, 0x3fc0b44aUL, 0x5a3e81b2UL, 0xbe567691UL, 0x00000000UL,
+  0x3fc06e69UL, 0x9d66afe7UL, 0xbe4d43fbUL, 0x00000000UL, 0x3fc028a2UL,
+  0x0a92a162UL, 0xbe52f394UL, 0x00000000UL, 0x3fbfc5eaUL, 0x209897e5UL,
+  0x3e529e37UL, 0x00000000UL, 0x3fbf3ac5UL, 0x8458bd7bUL, 0x3e582831UL,
+  0x00000000UL, 0x3fbeafd5UL, 0xb8d8b4b8UL, 0xbe486b4aUL, 0x00000000UL,
+  0x3fbe2518UL, 0xe0a3b7b6UL, 0x3e5bafd2UL, 0x00000000UL, 0x3fbd9a90UL,
+  0x2bf2710eUL, 0x3e383b2bUL, 0x00000000UL, 0x3fbd103cUL, 0x73eb6ab7UL,
+  0xbe56d78dUL, 0x00000000UL, 0x3fbc861bUL, 0x32ceaff5UL, 0xbe32dc5aUL,
+  0x00000000UL, 0x3fbbfc2eUL, 0xbee04cb7UL, 0xbe4a71a4UL, 0x00000000UL,
+  0x3fbb7274UL, 0x35ae9577UL, 0x3e38142fUL, 0x00000000UL, 0x3fbae8eeUL,
+  0xcbaddab4UL, 0xbe5490f0UL, 0x00000000UL, 0x3fba5f9aUL, 0x95ce1114UL,
+  0x3e597c71UL, 0x00000000UL, 0x3fb9d67aUL, 0x6d7c0f78UL, 0x3e3abc2dUL,
+  0x00000000UL, 0x3fb94d8dUL, 0x2841a782UL, 0xbe566cbcUL, 0x00000000UL,
+  0x3fb8c4d2UL, 0x6ed429c6UL, 0xbe3cfff9UL, 0x00000000UL, 0x3fb83c4aUL,
+  0xe4a49fbbUL, 0xbe552964UL, 0x00000000UL, 0x3fb7b3f4UL, 0x2193d81eUL,
+  0xbe42fa72UL, 0x00000000UL, 0x3fb72bd0UL, 0xdd70c122UL, 0x3e527a8cUL,
+  0x00000000UL, 0x3fb6a3dfUL, 0x03108a54UL, 0xbe450393UL, 0x00000000UL,
+  0x3fb61c1fUL, 0x30ff7954UL, 0x3e565840UL, 0x00000000UL, 0x3fb59492UL,
+  0xdedd460cUL, 0xbe5422b5UL, 0x00000000UL, 0x3fb50d36UL, 0x950f9f45UL,
+  0xbe5313f6UL, 0x00000000UL, 0x3fb4860bUL, 0x582cdcb1UL, 0x3e506d39UL,
+  0x00000000UL, 0x3fb3ff12UL, 0x7216d3a6UL, 0x3e4aa719UL, 0x00000000UL,
+  0x3fb3784aUL, 0x57a423fdUL, 0x3e5a9b9fUL, 0x00000000UL, 0x3fb2f1b4UL,
+  0x7a138b41UL, 0xbe50b418UL, 0x00000000UL, 0x3fb26b4eUL, 0x2fbfd7eaUL,
+  0x3e23a53eUL, 0x00000000UL, 0x3fb1e519UL, 0x18913ccbUL, 0x3e465fc1UL,
+  0x00000000UL, 0x3fb15f15UL, 0x7ea24e21UL, 0x3e042843UL, 0x00000000UL,
+  0x3fb0d941UL, 0x7c6d9c77UL, 0x3e59f61eUL, 0x00000000UL, 0x3fb0539eUL,
+  0x114efd44UL, 0x3e4ccab7UL, 0x00000000UL, 0x3faf9c56UL, 0x1777f657UL,
+  0x3e552f65UL, 0x00000000UL, 0x3fae91d2UL, 0xc317b86aUL, 0xbe5a61e0UL,
+  0x00000000UL, 0x3fad87acUL, 0xb7664efbUL, 0xbe41f64eUL, 0x00000000UL,
+  0x3fac7de6UL, 0x5d3d03a9UL, 0x3e0807a0UL, 0x00000000UL, 0x3fab7480UL,
+  0x743c38ebUL, 0xbe3726e1UL, 0x00000000UL, 0x3faa6b78UL, 0x06a253f1UL,
+  0x3e5ad636UL, 0x00000000UL, 0x3fa962d0UL, 0xa35f541bUL, 0x3e5a187aUL,
+  0x00000000UL, 0x3fa85a88UL, 0x4b86e446UL, 0xbe508150UL, 0x00000000UL,
+  0x3fa7529cUL, 0x2589cacfUL, 0x3e52938aUL, 0x00000000UL, 0x3fa64b10UL,
+  0xaf6b11f2UL, 0xbe3454cdUL, 0x00000000UL, 0x3fa543e2UL, 0x97506fefUL,
+  0xbe5fdec5UL, 0x00000000UL, 0x3fa43d10UL, 0xe75f7dd9UL, 0xbe388dd3UL,
+  0x00000000UL, 0x3fa3369cUL, 0xa4139632UL, 0xbdea5177UL, 0x00000000UL,
+  0x3fa23086UL, 0x352d6f1eUL, 0xbe565ad6UL, 0x00000000UL, 0x3fa12accUL,
+  0x77449eb7UL, 0xbe50d5c7UL, 0x00000000UL, 0x3fa0256eUL, 0x7478da78UL,
+  0x3e404724UL, 0x00000000UL, 0x3f9e40dcUL, 0xf59cef7fUL, 0xbe539d0aUL,
+  0x00000000UL, 0x3f9c3790UL, 0x1511d43cUL, 0x3e53c2c8UL, 0x00000000UL,
+  0x3f9a2f00UL, 0x9b8bff3cUL, 0xbe43b3e1UL, 0x00000000UL, 0x3f982724UL,
+  0xad1e22a5UL, 0x3e46f0bdUL, 0x00000000UL, 0x3f962000UL, 0x130d9356UL,
+  0x3e475ba0UL, 0x00000000UL, 0x3f941994UL, 0x8f86f883UL, 0xbe513d0bUL,
+  0x00000000UL, 0x3f9213dcUL, 0x914d0dc8UL, 0xbe534335UL, 0x00000000UL,
+  0x3f900ed8UL, 0x2d73e5e7UL, 0xbe22ba75UL, 0x00000000UL, 0x3f8c1510UL,
+  0xc5b7d70eUL, 0x3e599c5dUL, 0x00000000UL, 0x3f880de0UL, 0x8a27857eUL,
+  0xbe3d28c8UL, 0x00000000UL, 0x3f840810UL, 0xda767328UL, 0x3e531b3dUL,
+  0x00000000UL, 0x3f8003b0UL, 0x77bacaf3UL, 0xbe5f04e3UL, 0x00000000UL,
+  0x3f780150UL, 0xdf4b0720UL, 0x3e5a8bffUL, 0x00000000UL, 0x3f6ffc40UL,
+  0x34c48e71UL, 0xbe3fcd99UL, 0x00000000UL, 0x3f5ff6c0UL, 0x1ad218afUL,
+  0xbe4c78a7UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x80000000UL,
+  0x00000000UL, 0xfffff800UL, 0x00000000UL, 0xfffff800UL, 0x00000000UL,
+  0x3ff72000UL, 0x161bb241UL, 0xbf5dabe1UL, 0x6dc96112UL, 0xbf836578UL,
+  0xee241472UL, 0xbf9b0301UL, 0x9f95985aUL, 0xbfb528dbUL, 0xb3841d2aUL,
+  0xbfd619b6UL, 0x518775e3UL, 0x3f9004f2UL, 0xac8349bbUL, 0x3fa76c9bUL,
+  0x486ececcUL, 0x3fc4635eUL, 0x161bb241UL, 0xbf5dabe1UL, 0x9f95985aUL,
+  0xbfb528dbUL, 0xf8b5787dUL, 0x3ef2531eUL, 0x486ececbUL, 0x3fc4635eUL,
+  0x412055ccUL, 0xbdd61bb2UL, 0x00000000UL, 0xfffffff8UL, 0x00000000UL,
+  0xffffffffUL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0x3b700000UL,
+  0xfa5abcbfUL, 0x3ff00b1aUL, 0xa7609f71UL, 0xbc84f6b2UL, 0xa9fb3335UL,
+  0x3ff0163dUL, 0x9ab8cdb7UL, 0x3c9b6129UL, 0x143b0281UL, 0x3ff02168UL,
+  0x0fc54eb6UL, 0xbc82bf31UL, 0x3e778061UL, 0x3ff02c9aUL, 0x535b085dUL,
+  0xbc719083UL, 0x2e11bbccUL, 0x3ff037d4UL, 0xeeade11aUL, 0x3c656811UL,
+  0xe86e7f85UL, 0x3ff04315UL, 0x1977c96eUL, 0xbc90a31cUL, 0x72f654b1UL,
+  0x3ff04e5fUL, 0x3aa0d08cUL, 0x3c84c379UL, 0xd3158574UL, 0x3ff059b0UL,
+  0xa475b465UL, 0x3c8d73e2UL, 0x0e3c1f89UL, 0x3ff0650aUL, 0x5799c397UL,
+  0xbc95cb7bUL, 0x29ddf6deUL, 0x3ff0706bUL, 0xe2b13c27UL, 0xbc8c91dfUL,
+  0x2b72a836UL, 0x3ff07bd4UL, 0x54458700UL, 0x3c832334UL, 0x18759bc8UL,
+  0x3ff08745UL, 0x4bb284ffUL, 0x3c6186beUL, 0xf66607e0UL, 0x3ff092bdUL,
+  0x800a3fd1UL, 0xbc968063UL, 0xcac6f383UL, 0x3ff09e3eUL, 0x18316136UL,
+  0x3c914878UL, 0x9b1f3919UL, 0x3ff0a9c7UL, 0x873d1d38UL, 0x3c85d16cUL,
+  0x6cf9890fUL, 0x3ff0b558UL, 0x4adc610bUL, 0x3c98a62eUL, 0x45e46c85UL,
+  0x3ff0c0f1UL, 0x06d21cefUL, 0x3c94f989UL, 0x2b7247f7UL, 0x3ff0cc92UL,
+  0x16e24f71UL, 0x3c901edcUL, 0x23395decUL, 0x3ff0d83bUL, 0xe43f316aUL,
+  0xbc9bc14dUL, 0x32d3d1a2UL, 0x3ff0e3ecUL, 0x27c57b52UL, 0x3c403a17UL,
+  0x5fdfa9c5UL, 0x3ff0efa5UL, 0xbc54021bUL, 0xbc949db9UL, 0xaffed31bUL,
+  0x3ff0fb66UL, 0xc44ebd7bUL, 0xbc6b9bedUL, 0x28d7233eUL, 0x3ff10730UL,
+  0x1692fdd5UL, 0x3c8d46ebUL, 0xd0125b51UL, 0x3ff11301UL, 0x39449b3aUL,
+  0xbc96c510UL, 0xab5e2ab6UL, 0x3ff11edbUL, 0xf703fb72UL, 0xbc9ca454UL,
+  0xc06c31ccUL, 0x3ff12abdUL, 0xb36ca5c7UL, 0xbc51b514UL, 0x14f204abUL,
+  0x3ff136a8UL, 0xba48dcf0UL, 0xbc67108fUL, 0xaea92de0UL, 0x3ff1429aUL,
+  0x9af1369eUL, 0xbc932fbfUL, 0x934f312eUL, 0x3ff14e95UL, 0x39bf44abUL,
+  0xbc8b91e8UL, 0xc8a58e51UL, 0x3ff15a98UL, 0xb9eeab0aUL, 0x3c82406aUL,
+  0x5471c3c2UL, 0x3ff166a4UL, 0x82ea1a32UL, 0x3c58f23bUL, 0x3c7d517bUL,
+  0x3ff172b8UL, 0xb9d78a76UL, 0xbc819041UL, 0x8695bbc0UL, 0x3ff17ed4UL,
+  0xe2ac5a64UL, 0x3c709e3fUL, 0x388c8deaUL, 0x3ff18af9UL, 0xd1970f6cUL,
+  0xbc911023UL, 0x58375d2fUL, 0x3ff19726UL, 0x85f17e08UL, 0x3c94aaddUL,
+  0xeb6fcb75UL, 0x3ff1a35bUL, 0x7b4968e4UL, 0x3c8e5b4cUL, 0xf8138a1cUL,
+  0x3ff1af99UL, 0xa4b69280UL, 0x3c97bf85UL, 0x84045cd4UL, 0x3ff1bbe0UL,
+  0x352ef607UL, 0xbc995386UL, 0x95281c6bUL, 0x3ff1c82fUL, 0x8010f8c9UL,
+  0x3c900977UL, 0x3168b9aaUL, 0x3ff1d487UL, 0x00a2643cUL, 0x3c9e016eUL,
+  0x5eb44027UL, 0x3ff1e0e7UL, 0x088cb6deUL, 0xbc96fdd8UL, 0x22fcd91dUL,
+  0x3ff1ed50UL, 0x027bb78cUL, 0xbc91df98UL, 0x8438ce4dUL, 0x3ff1f9c1UL,
+  0xa097af5cUL, 0xbc9bf524UL, 0x88628cd6UL, 0x3ff2063bUL, 0x814a8495UL,
+  0x3c8dc775UL, 0x3578a819UL, 0x3ff212beUL, 0x2cfcaac9UL, 0x3c93592dUL,
+  0x917ddc96UL, 0x3ff21f49UL, 0x9494a5eeUL, 0x3c82a97eUL, 0xa27912d1UL,
+  0x3ff22bddUL, 0x5577d69fUL, 0x3c8d34fbUL, 0x6e756238UL, 0x3ff2387aUL,
+  0xb6c70573UL, 0x3c99b07eUL, 0xfb82140aUL, 0x3ff2451fUL, 0x911ca996UL,
+  0x3c8acfccUL, 0x4fb2a63fUL, 0x3ff251ceUL, 0xbef4f4a4UL, 0x3c8ac155UL,
+  0x711ece75UL, 0x3ff25e85UL, 0x4ac31b2cUL, 0x3c93e1a2UL, 0x65e27cddUL,
+  0x3ff26b45UL, 0x9940e9d9UL, 0x3c82bd33UL, 0x341ddf29UL, 0x3ff2780eUL,
+  0x05f9e76cUL, 0x3c9e067cUL, 0xe1f56381UL, 0x3ff284dfUL, 0x8c3f0d7eUL,
+  0xbc9a4c3aUL, 0x7591bb70UL, 0x3ff291baUL, 0x28401cbdUL, 0xbc82cc72UL,
+  0xf51fdee1UL, 0x3ff29e9dUL, 0xafad1255UL, 0x3c8612e8UL, 0x66d10f13UL,
+  0x3ff2ab8aUL, 0x191690a7UL, 0xbc995743UL, 0xd0dad990UL, 0x3ff2b87fUL,
+  0xd6381aa4UL, 0xbc410adcUL, 0x39771b2fUL, 0x3ff2c57eUL, 0xa6eb5124UL,
+  0xbc950145UL, 0xa6e4030bUL, 0x3ff2d285UL, 0x54db41d5UL, 0x3c900247UL,
+  0x1f641589UL, 0x3ff2df96UL, 0xfbbce198UL, 0x3c9d16cfUL, 0xa93e2f56UL,
+  0x3ff2ecafUL, 0x45d52383UL, 0x3c71ca0fUL, 0x4abd886bUL, 0x3ff2f9d2UL,
+  0x532bda93UL, 0xbc653c55UL, 0x0a31b715UL, 0x3ff306feUL, 0xd23182e4UL,
+  0x3c86f46aUL, 0xedeeb2fdUL, 0x3ff31432UL, 0xf3f3fcd1UL, 0x3c8959a3UL,
+  0xfc4cd831UL, 0x3ff32170UL, 0x8e18047cUL, 0x3c8a9ce7UL, 0x3ba8ea32UL,
+  0x3ff32eb8UL, 0x3cb4f318UL, 0xbc9c45e8UL, 0xb26416ffUL, 0x3ff33c08UL,
+  0x843659a6UL, 0x3c932721UL, 0x66e3fa2dUL, 0x3ff34962UL, 0x930881a4UL,
+  0xbc835a75UL, 0x5f929ff1UL, 0x3ff356c5UL, 0x5c4e4628UL, 0xbc8b5ceeUL,
+  0xa2de883bUL, 0x3ff36431UL, 0xa06cb85eUL, 0xbc8c3144UL, 0x373aa9cbUL,
+  0x3ff371a7UL, 0xbf42eae2UL, 0xbc963aeaUL, 0x231e754aUL, 0x3ff37f26UL,
+  0x9eceb23cUL, 0xbc99f5caUL, 0x6d05d866UL, 0x3ff38caeUL, 0x3c9904bdUL,
+  0xbc9e958dUL, 0x1b7140efUL, 0x3ff39a40UL, 0xfc8e2934UL, 0xbc99a9a5UL,
+  0x34e59ff7UL, 0x3ff3a7dbUL, 0xd661f5e3UL, 0xbc75e436UL, 0xbfec6cf4UL,
+  0x3ff3b57fUL, 0xe26fff18UL, 0x3c954c66UL, 0xc313a8e5UL, 0x3ff3c32dUL,
+  0x375d29c3UL, 0xbc9efff8UL, 0x44ede173UL, 0x3ff3d0e5UL, 0x8c284c71UL,
+  0x3c7fe8d0UL, 0x4c123422UL, 0x3ff3dea6UL, 0x11f09ebcUL, 0x3c8ada09UL,
+  0xdf1c5175UL, 0x3ff3ec70UL, 0x7b8c9bcaUL, 0xbc8af663UL, 0x04ac801cUL,
+  0x3ff3fa45UL, 0xf956f9f3UL, 0xbc97d023UL, 0xc367a024UL, 0x3ff40822UL,
+  0xb6f4d048UL, 0x3c8bddf8UL, 0x21f72e2aUL, 0x3ff4160aUL, 0x1c309278UL,
+  0xbc5ef369UL, 0x2709468aUL, 0x3ff423fbUL, 0xc0b314ddUL, 0xbc98462dUL,
+  0xd950a897UL, 0x3ff431f5UL, 0xe35f7999UL, 0xbc81c7ddUL, 0x3f84b9d4UL,
+  0x3ff43ffaUL, 0x9704c003UL, 0x3c8880beUL, 0x6061892dUL, 0x3ff44e08UL,
+  0x04ef80d0UL, 0x3c489b7aUL, 0x42a7d232UL, 0x3ff45c20UL, 0x82fb1f8eUL,
+  0xbc686419UL, 0xed1d0057UL, 0x3ff46a41UL, 0xd1648a76UL, 0x3c9c944bUL,
+  0x668b3237UL, 0x3ff4786dUL, 0xed445733UL, 0xbc9c20f0UL, 0xb5c13cd0UL,
+  0x3ff486a2UL, 0xb69062f0UL, 0x3c73c1a3UL, 0xe192aed2UL, 0x3ff494e1UL,
+  0x5e499ea0UL, 0xbc83b289UL, 0xf0d7d3deUL, 0x3ff4a32aUL, 0xf3d1be56UL,
+  0x3c99cb62UL, 0xea6db7d7UL, 0x3ff4b17dUL, 0x7f2897f0UL, 0xbc8125b8UL,
+  0xd5362a27UL, 0x3ff4bfdaUL, 0xafec42e2UL, 0x3c7d4397UL, 0xb817c114UL,
+  0x3ff4ce41UL, 0x690abd5dUL, 0x3c905e29UL, 0x99fddd0dUL, 0x3ff4dcb2UL,
+  0xbc6a7833UL, 0x3c98ecdbUL, 0x81d8abffUL, 0x3ff4eb2dUL, 0x2e5d7a52UL,
+  0xbc95257dUL, 0x769d2ca7UL, 0x3ff4f9b2UL, 0xd25957e3UL, 0xbc94b309UL,
+  0x7f4531eeUL, 0x3ff50841UL, 0x49b7465fUL, 0x3c7a249bUL, 0xa2cf6642UL,
+  0x3ff516daUL, 0x69bd93efUL, 0xbc8f7685UL, 0xe83f4eefUL, 0x3ff5257dUL,
+  0x43efef71UL, 0xbc7c998dUL, 0x569d4f82UL, 0x3ff5342bUL, 0x1db13cadUL,
+  0xbc807abeUL, 0xf4f6ad27UL, 0x3ff542e2UL, 0x192d5f7eUL, 0x3c87926dUL,
+  0xca5d920fUL, 0x3ff551a4UL, 0xefede59bUL, 0xbc8d689cUL, 0xdde910d2UL,
+  0x3ff56070UL, 0x168eebf0UL, 0xbc90fb6eUL, 0x36b527daUL, 0x3ff56f47UL,
+  0x011d93adUL, 0x3c99bb2cUL, 0xdbe2c4cfUL, 0x3ff57e27UL, 0x8a57b9c4UL,
+  0xbc90b98cUL, 0xd497c7fdUL, 0x3ff58d12UL, 0x5b9a1de8UL, 0x3c8295e1UL,
+  0x27ff07ccUL, 0x3ff59c08UL, 0xe467e60fUL, 0xbc97e2ceUL, 0xdd485429UL,
+  0x3ff5ab07UL, 0x054647adUL, 0x3c96324cUL, 0xfba87a03UL, 0x3ff5ba11UL,
+  0x4c233e1aUL, 0xbc9b77a1UL, 0x8a5946b7UL, 0x3ff5c926UL, 0x816986a2UL,
+  0x3c3c4b1bUL, 0x90998b93UL, 0x3ff5d845UL, 0xa8b45643UL, 0xbc9cd6a7UL,
+  0x15ad2148UL, 0x3ff5e76fUL, 0x3080e65eUL, 0x3c9ba6f9UL, 0x20dceb71UL,
+  0x3ff5f6a3UL, 0xe3cdcf92UL, 0xbc89eaddUL, 0xb976dc09UL, 0x3ff605e1UL,
+  0x9b56de47UL, 0xbc93e242UL, 0xe6cdf6f4UL, 0x3ff6152aUL, 0x4ab84c27UL,
+  0x3c9e4b3eUL, 0xb03a5585UL, 0x3ff6247eUL, 0x7e40b497UL, 0xbc9383c1UL,
+  0x1d1929fdUL, 0x3ff633ddUL, 0xbeb964e5UL, 0x3c984710UL, 0x34ccc320UL,
+  0x3ff64346UL, 0x759d8933UL, 0xbc8c483cUL, 0xfebc8fb7UL, 0x3ff652b9UL,
+  0xc9a73e09UL, 0xbc9ae3d5UL, 0x82552225UL, 0x3ff66238UL, 0x87591c34UL,
+  0xbc9bb609UL, 0xc70833f6UL, 0x3ff671c1UL, 0x586c6134UL, 0xbc8e8732UL,
+  0xd44ca973UL, 0x3ff68155UL, 0x44f73e65UL, 0x3c6038aeUL, 0xb19e9538UL,
+  0x3ff690f4UL, 0x9aeb445dUL, 0x3c8804bdUL, 0x667f3bcdUL, 0x3ff6a09eUL,
+  0x13b26456UL, 0xbc9bdd34UL, 0xfa75173eUL, 0x3ff6b052UL, 0x2c9a9d0eUL,
+  0x3c7a38f5UL, 0x750bdabfUL, 0x3ff6c012UL, 0x67ff0b0dUL, 0xbc728956UL,
+  0xddd47645UL, 0x3ff6cfdcUL, 0xb6f17309UL, 0x3c9c7aa9UL, 0x3c651a2fUL,
+  0x3ff6dfb2UL, 0x683c88abUL, 0xbc6bbe3aUL, 0x98593ae5UL, 0x3ff6ef92UL,
+  0x9e1ac8b2UL, 0xbc90b974UL, 0xf9519484UL, 0x3ff6ff7dUL, 0x25860ef6UL,
+  0xbc883c0fUL, 0x66f42e87UL, 0x3ff70f74UL, 0xd45aa65fUL, 0x3c59d644UL,
+  0xe8ec5f74UL, 0x3ff71f75UL, 0x86887a99UL, 0xbc816e47UL, 0x86ead08aUL,
+  0x3ff72f82UL, 0x2cd62c72UL, 0xbc920aa0UL, 0x48a58174UL, 0x3ff73f9aUL,
+  0x6c65d53cUL, 0xbc90a8d9UL, 0x35d7cbfdUL, 0x3ff74fbdUL, 0x618a6e1cUL,
+  0x3c9047fdUL, 0x564267c9UL, 0x3ff75febUL, 0x57316dd3UL, 0xbc902459UL,
+  0xb1ab6e09UL, 0x3ff77024UL, 0x169147f8UL, 0x3c9b7877UL, 0x4fde5d3fUL,
+  0x3ff78069UL, 0x0a02162dUL, 0x3c9866b8UL, 0x38ac1cf6UL, 0x3ff790b9UL,
+  0x62aadd3eUL, 0x3c9349a8UL, 0x73eb0187UL, 0x3ff7a114UL, 0xee04992fUL,
+  0xbc841577UL, 0x0976cfdbUL, 0x3ff7b17bUL, 0x8468dc88UL, 0xbc9bebb5UL,
+  0x0130c132UL, 0x3ff7c1edUL, 0xd1164dd6UL, 0x3c9f124cUL, 0x62ff86f0UL,
+  0x3ff7d26aUL, 0xfb72b8b4UL, 0x3c91bddbUL, 0x36cf4e62UL, 0x3ff7e2f3UL,
+  0xba15797eUL, 0x3c705d02UL, 0x8491c491UL, 0x3ff7f387UL, 0xcf9311aeUL,
+  0xbc807f11UL, 0x543e1a12UL, 0x3ff80427UL, 0x626d972bUL, 0xbc927c86UL,
+  0xadd106d9UL, 0x3ff814d2UL, 0x0d151d4dUL, 0x3c946437UL, 0x994cce13UL,
+  0x3ff82589UL, 0xd41532d8UL, 0xbc9d4c1dUL, 0x1eb941f7UL, 0x3ff8364cUL,
+  0x31df2bd5UL, 0x3c999b9aUL, 0x4623c7adUL, 0x3ff8471aUL, 0xa341cdfbUL,
+  0xbc88d684UL, 0x179f5b21UL, 0x3ff857f4UL, 0xf8b216d0UL, 0xbc5ba748UL,
+  0x9b4492edUL, 0x3ff868d9UL, 0x9bd4f6baUL, 0xbc9fc6f8UL, 0xd931a436UL,
+  0x3ff879caUL, 0xd2db47bdUL, 0x3c85d2d7UL, 0xd98a6699UL, 0x3ff88ac7UL,
+  0xf37cb53aUL, 0x3c9994c2UL, 0xa478580fUL, 0x3ff89bd0UL, 0x4475202aUL,
+  0x3c9d5395UL, 0x422aa0dbUL, 0x3ff8ace5UL, 0x56864b27UL, 0x3c96e9f1UL,
+  0xbad61778UL, 0x3ff8be05UL, 0xfc43446eUL, 0x3c9ecb5eUL, 0x16b5448cUL,
+  0x3ff8cf32UL, 0x32e9e3aaUL, 0xbc70d55eUL, 0x5e0866d9UL, 0x3ff8e06aUL,
+  0x6fc9b2e6UL, 0xbc97114aUL, 0x99157736UL, 0x3ff8f1aeUL, 0xa2e3976cUL,
+  0x3c85cc13UL, 0xd0282c8aUL, 0x3ff902feUL, 0x85fe3fd2UL, 0x3c9592caUL,
+  0x0b91ffc6UL, 0x3ff9145bUL, 0x2e582524UL, 0xbc9dd679UL, 0x53aa2fe2UL,
+  0x3ff925c3UL, 0xa639db7fUL, 0xbc83455fUL, 0xb0cdc5e5UL, 0x3ff93737UL,
+  0x81b57ebcUL, 0xbc675fc7UL, 0x2b5f98e5UL, 0x3ff948b8UL, 0x797d2d99UL,
+  0xbc8dc3d6UL, 0xcbc8520fUL, 0x3ff95a44UL, 0x96a5f039UL, 0xbc764b7cUL,
+  0x9a7670b3UL, 0x3ff96bddUL, 0x7f19c896UL, 0xbc5ba596UL, 0x9fde4e50UL,
+  0x3ff97d82UL, 0x7c1b85d1UL, 0xbc9d185bUL, 0xe47a22a2UL, 0x3ff98f33UL,
+  0xa24c78ecUL, 0x3c7cabdaUL, 0x70ca07baUL, 0x3ff9a0f1UL, 0x91cee632UL,
+  0xbc9173bdUL, 0x4d53fe0dUL, 0x3ff9b2bbUL, 0x4df6d518UL, 0xbc9dd84eUL,
+  0x82a3f090UL, 0x3ff9c491UL, 0xb071f2beUL, 0x3c7c7c46UL, 0x194bb8d5UL,
+  0x3ff9d674UL, 0xa3dd8233UL, 0xbc9516beUL, 0x19e32323UL, 0x3ff9e863UL,
+  0x78e64c6eUL, 0x3c7824caUL, 0x8d07f29eUL, 0x3ff9fa5eUL, 0xaaf1faceUL,
+  0xbc84a9ceUL, 0x7b5de565UL, 0x3ffa0c66UL, 0x5d1cd533UL, 0xbc935949UL,
+  0xed8eb8bbUL, 0x3ffa1e7aUL, 0xee8be70eUL, 0x3c9c6618UL, 0xec4a2d33UL,
+  0x3ffa309bUL, 0x7ddc36abUL, 0x3c96305cUL, 0x80460ad8UL, 0x3ffa42c9UL,
+  0x589fb120UL, 0xbc9aa780UL, 0xb23e255dUL, 0x3ffa5503UL, 0xdb8d41e1UL,
+  0xbc9d2f6eUL, 0x8af46052UL, 0x3ffa674aUL, 0x30670366UL, 0x3c650f56UL,
+  0x1330b358UL, 0x3ffa799eUL, 0xcac563c7UL, 0x3c9bcb7eUL, 0x53c12e59UL,
+  0x3ffa8bfeUL, 0xb2ba15a9UL, 0xbc94f867UL, 0x5579fdbfUL, 0x3ffa9e6bUL,
+  0x0ef7fd31UL, 0x3c90fac9UL, 0x21356ebaUL, 0x3ffab0e5UL, 0xdae94545UL,
+  0x3c889c31UL, 0xbfd3f37aUL, 0x3ffac36bUL, 0xcae76cd0UL, 0xbc8f9234UL,
+  0x3a3c2774UL, 0x3ffad5ffUL, 0xb6b1b8e5UL, 0x3c97ef3bUL, 0x995ad3adUL,
+  0x3ffae89fUL, 0x345dcc81UL, 0x3c97a1cdUL, 0xe622f2ffUL, 0x3ffafb4cUL,
+  0x0f315ecdUL, 0xbc94b2fcUL, 0x298db666UL, 0x3ffb0e07UL, 0x4c80e425UL,
+  0xbc9bdef5UL, 0x6c9a8952UL, 0x3ffb20ceUL, 0x4a0756ccUL, 0x3c94dd02UL,
+  0xb84f15fbUL, 0x3ffb33a2UL, 0x3084d708UL, 0xbc62805eUL, 0x15b749b1UL,
+  0x3ffb4684UL, 0xe9df7c90UL, 0xbc7f763dUL, 0x8de5593aUL, 0x3ffb5972UL,
+  0xbbba6de3UL, 0xbc9c71dfUL, 0x29f1c52aUL, 0x3ffb6c6eUL, 0x52883f6eUL,
+  0x3c92a8f3UL, 0xf2fb5e47UL, 0x3ffb7f76UL, 0x7e54ac3bUL, 0xbc75584fUL,
+  0xf22749e4UL, 0x3ffb928cUL, 0x54cb65c6UL, 0xbc9b7216UL, 0x30a1064aUL,
+  0x3ffba5b0UL, 0x0e54292eUL, 0xbc9efcd3UL, 0xb79a6f1fUL, 0x3ffbb8e0UL,
+  0xc9696205UL, 0xbc3f52d1UL, 0x904bc1d2UL, 0x3ffbcc1eUL, 0x7a2d9e84UL,
+  0x3c823dd0UL, 0xc3f3a207UL, 0x3ffbdf69UL, 0x60ea5b53UL, 0xbc3c2623UL,
+  0x5bd71e09UL, 0x3ffbf2c2UL, 0x3f6b9c73UL, 0xbc9efdcaUL, 0x6141b33dUL,
+  0x3ffc0628UL, 0xa1fbca34UL, 0xbc8d8a5aUL, 0xdd85529cUL, 0x3ffc199bUL,
+  0x895048ddUL, 0x3c811065UL, 0xd9fa652cUL, 0x3ffc2d1cUL, 0x17c8a5d7UL,
+  0xbc96e516UL, 0x5fffd07aUL, 0x3ffc40abUL, 0xe083c60aUL, 0x3c9b4537UL,
+  0x78fafb22UL, 0x3ffc5447UL, 0x2493b5afUL, 0x3c912f07UL, 0x2e57d14bUL,
+  0x3ffc67f1UL, 0xff483cadUL, 0x3c92884dUL, 0x8988c933UL, 0x3ffc7ba8UL,
+  0xbe255559UL, 0xbc8e76bbUL, 0x9406e7b5UL, 0x3ffc8f6dUL, 0x48805c44UL,
+  0x3c71acbcUL, 0x5751c4dbUL, 0x3ffca340UL, 0xd10d08f5UL, 0xbc87f2beUL,
+  0xdcef9069UL, 0x3ffcb720UL, 0xd1e949dbUL, 0x3c7503cbUL, 0x2e6d1675UL,
+  0x3ffccb0fUL, 0x86009092UL, 0xbc7d220fUL, 0x555dc3faUL, 0x3ffcdf0bUL,
+  0x53829d72UL, 0xbc8dd83bUL, 0x5b5bab74UL, 0x3ffcf315UL, 0xb86dff57UL,
+  0xbc9a08e9UL, 0x4a07897cUL, 0x3ffd072dUL, 0x43797a9cUL, 0xbc9cbc37UL,
+  0x2b08c968UL, 0x3ffd1b53UL, 0x219a36eeUL, 0x3c955636UL, 0x080d89f2UL,
+  0x3ffd2f87UL, 0x719d8578UL, 0xbc9d487bUL, 0xeacaa1d6UL, 0x3ffd43c8UL,
+  0xbf5a1614UL, 0x3c93db53UL, 0xdcfba487UL, 0x3ffd5818UL, 0xd75b3707UL,
+  0x3c82ed02UL, 0xe862e6d3UL, 0x3ffd6c76UL, 0x4a8165a0UL, 0x3c5fe87aUL,
+  0x16c98398UL, 0x3ffd80e3UL, 0x8beddfe8UL, 0xbc911ec1UL, 0x71ff6075UL,
+  0x3ffd955dUL, 0xbb9af6beUL, 0x3c9a052dUL, 0x03db3285UL, 0x3ffda9e6UL,
+  0x696db532UL, 0x3c9c2300UL, 0xd63a8315UL, 0x3ffdbe7cUL, 0x926b8be4UL,
+  0xbc9b76f1UL, 0xf301b460UL, 0x3ffdd321UL, 0x78f018c3UL, 0x3c92da57UL,
+  0x641c0658UL, 0x3ffde7d5UL, 0x8e79ba8fUL, 0xbc9ca552UL, 0x337b9b5fUL,
+  0x3ffdfc97UL, 0x4f184b5cUL, 0xbc91a5cdUL, 0x6b197d17UL, 0x3ffe1167UL,
+  0xbd5c7f44UL, 0xbc72b529UL, 0x14f5a129UL, 0x3ffe2646UL, 0x817a1496UL,
+  0xbc97b627UL, 0x3b16ee12UL, 0x3ffe3b33UL, 0x31fdc68bUL, 0xbc99f4a4UL,
+  0xe78b3ff6UL, 0x3ffe502eUL, 0x80a9cc8fUL, 0x3c839e89UL, 0x24676d76UL,
+  0x3ffe6539UL, 0x7522b735UL, 0xbc863ff8UL, 0xfbc74c83UL, 0x3ffe7a51UL,
+  0xca0c8de2UL, 0x3c92d522UL, 0x77cdb740UL, 0x3ffe8f79UL, 0x80b054b1UL,
+  0xbc910894UL, 0xa2a490daUL, 0x3ffea4afUL, 0x179c2893UL, 0xbc9e9c23UL,
+  0x867cca6eUL, 0x3ffeb9f4UL, 0x2293e4f2UL, 0x3c94832fUL, 0x2d8e67f1UL,
+  0x3ffecf48UL, 0xb411ad8cUL, 0xbc9c93f3UL, 0xa2188510UL, 0x3ffee4aaUL,
+  0xa487568dUL, 0x3c91c68dUL, 0xee615a27UL, 0x3ffefa1bUL, 0x86a4b6b0UL,
+  0x3c9dc7f4UL, 0x1cb6412aUL, 0x3fff0f9cUL, 0x65181d45UL, 0xbc932200UL,
+  0x376bba97UL, 0x3fff252bUL, 0xbf0d8e43UL, 0x3c93a1a5UL, 0x48dd7274UL,
+  0x3fff3ac9UL, 0x3ed837deUL, 0xbc795a5aUL, 0x5b6e4540UL, 0x3fff5076UL,
+  0x2dd8a18bUL, 0x3c99d3e1UL, 0x798844f8UL, 0x3fff6632UL, 0x3539343eUL,
+  0x3c9fa37bUL, 0xad9cbe14UL, 0x3fff7bfdUL, 0xd006350aUL, 0xbc9dbb12UL,
+  0x02243c89UL, 0x3fff91d8UL, 0xa779f689UL, 0xbc612ea8UL, 0x819e90d8UL,
+  0x3fffa7c1UL, 0xf3a5931eUL, 0x3c874853UL, 0x3692d514UL, 0x3fffbdbaUL,
+  0x15098eb6UL, 0xbc796773UL, 0x2b8f71f1UL, 0x3fffd3c2UL, 0x966579e7UL,
+  0x3c62eb74UL, 0x6b2a23d9UL, 0x3fffe9d9UL, 0x7442fde3UL, 0x3c74a603UL,
+  0xe78a6731UL, 0x3f55d87fUL, 0xd704a0c0UL, 0x3fac6b08UL, 0x6fba4e77UL,
+  0x3f83b2abUL, 0xff82c58fUL, 0x3fcebfbdUL, 0xfefa39efUL, 0x3fe62e42UL,
+  0x00000000UL, 0x00000000UL, 0xfefa39efUL, 0x3fe62e42UL, 0xfefa39efUL,
+  0xbfe62e42UL, 0xf8000000UL, 0xffffffffUL, 0xf8000000UL, 0xffffffffUL,
+  0x00000000UL, 0x80000000UL, 0x00000000UL, 0x00000000UL
+
+};
+
+//registers,
+// input: xmm0, xmm1
+// scratch: xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7
+//          eax, edx, ecx, ebx
+
+// Code generated by Intel C compiler for LIBM library
+
+void MacroAssembler::fast_pow(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ecx, Register edx, Register tmp) {
+  Label L_2TAG_PACKET_0_0_2, L_2TAG_PACKET_1_0_2, L_2TAG_PACKET_2_0_2, L_2TAG_PACKET_3_0_2;
+  Label L_2TAG_PACKET_4_0_2, L_2TAG_PACKET_5_0_2, L_2TAG_PACKET_6_0_2, L_2TAG_PACKET_7_0_2;
+  Label L_2TAG_PACKET_8_0_2, L_2TAG_PACKET_9_0_2, L_2TAG_PACKET_10_0_2, L_2TAG_PACKET_11_0_2;
+  Label L_2TAG_PACKET_12_0_2, L_2TAG_PACKET_13_0_2, L_2TAG_PACKET_14_0_2, L_2TAG_PACKET_15_0_2;
+  Label L_2TAG_PACKET_16_0_2, L_2TAG_PACKET_17_0_2, L_2TAG_PACKET_18_0_2, L_2TAG_PACKET_19_0_2;
+  Label L_2TAG_PACKET_20_0_2, L_2TAG_PACKET_21_0_2, L_2TAG_PACKET_22_0_2, L_2TAG_PACKET_23_0_2;
+  Label L_2TAG_PACKET_24_0_2, L_2TAG_PACKET_25_0_2, L_2TAG_PACKET_26_0_2, L_2TAG_PACKET_27_0_2;
+  Label L_2TAG_PACKET_28_0_2, L_2TAG_PACKET_29_0_2, L_2TAG_PACKET_30_0_2, L_2TAG_PACKET_31_0_2;
+  Label L_2TAG_PACKET_32_0_2, L_2TAG_PACKET_33_0_2, L_2TAG_PACKET_34_0_2, L_2TAG_PACKET_35_0_2;
+  Label L_2TAG_PACKET_36_0_2, L_2TAG_PACKET_37_0_2, L_2TAG_PACKET_38_0_2, L_2TAG_PACKET_39_0_2;
+  Label L_2TAG_PACKET_40_0_2, L_2TAG_PACKET_41_0_2, L_2TAG_PACKET_42_0_2, L_2TAG_PACKET_43_0_2;
+  Label L_2TAG_PACKET_44_0_2, L_2TAG_PACKET_45_0_2, L_2TAG_PACKET_46_0_2, L_2TAG_PACKET_47_0_2;
+  Label L_2TAG_PACKET_48_0_2, L_2TAG_PACKET_49_0_2, L_2TAG_PACKET_50_0_2, L_2TAG_PACKET_51_0_2;
+  Label L_2TAG_PACKET_52_0_2, L_2TAG_PACKET_53_0_2, L_2TAG_PACKET_54_0_2, L_2TAG_PACKET_55_0_2;
+  Label L_2TAG_PACKET_56_0_2, L_2TAG_PACKET_57_0_2, L_2TAG_PACKET_58_0_2, start;
+
+  assert_different_registers(tmp, eax, ecx, edx);
+
+  address static_const_table_pow = (address)_static_const_table_pow;
+
+  bind(start);
+  subl(rsp, 120);
+  movl(Address(rsp, 64), tmp);
+  lea(tmp, ExternalAddress(static_const_table_pow));
+  movsd(xmm0, Address(rsp, 128));
+  movsd(xmm1, Address(rsp, 136));
+  xorpd(xmm2, xmm2);
+  movl(eax, 16368);
+  pinsrw(xmm2, eax, 3);
+  movl(ecx, 1069088768);
+  movdl(xmm7, ecx);
+  movsd(Address(rsp, 16), xmm1);
+  xorpd(xmm1, xmm1);
+  movl(edx, 30704);
+  pinsrw(xmm1, edx, 3);
+  movsd(Address(rsp, 8), xmm0);
+  movdqu(xmm3, xmm0);
+  movl(edx, 8192);
+  movdl(xmm4, edx);
+  movdqu(xmm6, Address(tmp, 8240));
+  pextrw(eax, xmm0, 3);
+  por(xmm0, xmm2);
+  psllq(xmm0, 5);
+  movsd(xmm2, Address(tmp, 8256));
+  psrlq(xmm0, 34);
+  movl(edx, eax);
+  andl(edx, 32752);
+  subl(edx, 16368);
+  movl(ecx, edx);
+  sarl(edx, 31);
+  addl(ecx, edx);
+  xorl(ecx, edx);
+  rcpss(xmm0, xmm0);
+  psllq(xmm3, 12);
+  addl(ecx, 16);
+  bsrl(ecx, ecx);
+  psrlq(xmm3, 12);
+  movl(Address(rsp, 24), rsi);
+  subl(eax, 16);
+  cmpl(eax, 32736);
+  jcc(Assembler::aboveEqual, L_2TAG_PACKET_0_0_2);
+  movl(rsi, 0);
+
+  bind(L_2TAG_PACKET_1_0_2);
+  mulss(xmm0, xmm7);
+  movl(edx, -1);
+  subl(ecx, 4);
+  shll(edx);
+  movdl(xmm5, edx);
+  por(xmm3, xmm1);
+  subl(eax, 16351);
+  cmpl(eax, 1);
+  jcc(Assembler::belowEqual, L_2TAG_PACKET_2_0_2);
+  paddd(xmm0, xmm4);
+  psllq(xmm5, 32);
+  movdl(edx, xmm0);
+  psllq(xmm0, 29);
+  pand(xmm5, xmm3);
+
+  bind(L_2TAG_PACKET_3_0_2);
+  pand(xmm0, xmm6);
+  subsd(xmm3, xmm5);
+  subl(eax, 1);
+  sarl(eax, 4);
+  cvtsi2sdl(xmm7, eax);
+  mulpd(xmm5, xmm0);
+
+  bind(L_2TAG_PACKET_4_0_2);
+  mulsd(xmm3, xmm0);
+  movdqu(xmm1, Address(tmp, 8272));
+  subsd(xmm5, xmm2);
+  movdqu(xmm4, Address(tmp, 8288));
+  movl(ecx, eax);
+  sarl(eax, 31);
+  addl(ecx, eax);
+  xorl(eax, ecx);
+  addl(eax, 1);
+  bsrl(eax, eax);
+  unpcklpd(xmm5, xmm3);
+  movdqu(xmm6, Address(tmp, 8304));
+  addsd(xmm3, xmm5);
+  andl(edx, 16760832);
+  shrl(edx, 10);
+  addpd(xmm5, Address(tmp, edx, Address::times_1, -3616));
+  movdqu(xmm0, Address(tmp, 8320));
+  pshufd(xmm2, xmm3, 68);
+  mulsd(xmm3, xmm3);
+  mulpd(xmm1, xmm2);
+  mulpd(xmm4, xmm2);
+  addsd(xmm5, xmm7);
+  mulsd(xmm2, xmm3);
+  addpd(xmm6, xmm1);
+  mulsd(xmm3, xmm3);
+  addpd(xmm0, xmm4);
+  movsd(xmm1, Address(rsp, 16));
+  movzwl(ecx, Address(rsp, 22));
+  pshufd(xmm7, xmm5, 238);
+  movsd(xmm4, Address(tmp, 8368));
+  mulpd(xmm6, xmm2);
+  pshufd(xmm3, xmm3, 68);
+  mulpd(xmm0, xmm2);
+  shll(eax, 4);
+  subl(eax, 15872);
+  andl(ecx, 32752);
+  addl(eax, ecx);
+  mulpd(xmm3, xmm6);
+  cmpl(eax, 624);
+  jcc(Assembler::aboveEqual, L_2TAG_PACKET_5_0_2);
+  xorpd(xmm6, xmm6);
+  movl(edx, 17080);
+  pinsrw(xmm6, edx, 3);
+  movdqu(xmm2, xmm1);
+  pand(xmm4, xmm1);
+  subsd(xmm1, xmm4);
+  mulsd(xmm4, xmm5);
+  addsd(xmm0, xmm7);
+  mulsd(xmm1, xmm5);
+  movdqu(xmm7, xmm6);
+  addsd(xmm6, xmm4);
+  addpd(xmm3, xmm0);
+  movdl(edx, xmm6);
+  subsd(xmm6, xmm7);
+  pshufd(xmm0, xmm3, 238);
+  subsd(xmm4, xmm6);
+  addsd(xmm0, xmm3);
+  movl(ecx, edx);
+  andl(edx, 255);
+  addl(edx, edx);
+  movdqu(xmm5, Address(tmp, edx, Address::times_8, 8384));
+  addsd(xmm4, xmm1);
+  mulsd(xmm2, xmm0);
+  movdqu(xmm7, Address(tmp, 12480));
+  movdqu(xmm3, Address(tmp, 12496));
+  shll(ecx, 12);
+  xorl(ecx, rsi);
+  andl(ecx, -1048576);
+  movdl(xmm6, ecx);
+  addsd(xmm2, xmm4);
+  movsd(xmm1, Address(tmp, 12512));
+  pshufd(xmm0, xmm2, 68);
+  pshufd(xmm4, xmm2, 68);
+  mulpd(xmm0, xmm0);
+  movl(rsi, Address(rsp, 24));
+  mulpd(xmm7, xmm4);
+  pshufd(xmm6, xmm6, 17);
+  mulsd(xmm1, xmm2);
+  mulsd(xmm0, xmm0);
+  paddd(xmm5, xmm6);
+  addpd(xmm3, xmm7);
+  mulsd(xmm1, xmm5);
+  pshufd(xmm6, xmm5, 238);
+  mulpd(xmm0, xmm3);
+  addsd(xmm1, xmm6);
+  pshufd(xmm3, xmm0, 238);
+  mulsd(xmm0, xmm5);
+  mulsd(xmm3, xmm5);
+  addsd(xmm0, xmm1);
+  addsd(xmm0, xmm3);
+  addsd(xmm0, xmm5);
+  movsd(Address(rsp, 0), xmm0);
+  fld_d(Address(rsp, 0));
+  jmp(L_2TAG_PACKET_6_0_2);
+
+  bind(L_2TAG_PACKET_7_0_2);
+  movsd(xmm0, Address(rsp, 128));
+  movsd(xmm1, Address(rsp, 136));
+  mulsd(xmm0, xmm1);
+  movsd(Address(rsp, 0), xmm0);
+  fld_d(Address(rsp, 0));
+  jmp(L_2TAG_PACKET_6_0_2);
+
+  bind(L_2TAG_PACKET_0_0_2);
+  addl(eax, 16);
+  movl(edx, 32752);
+  andl(edx, eax);
+  cmpl(edx, 32752);
+  jcc(Assembler::equal, L_2TAG_PACKET_8_0_2);
+  testl(eax, 32768);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_9_0_2);
+
+  bind(L_2TAG_PACKET_10_0_2);
+  movl(ecx, Address(rsp, 16));
+  xorl(edx, edx);
+  testl(ecx, ecx);
+  movl(ecx, 1);
+  cmovl(Assembler::notEqual, edx, ecx);
+  orl(edx, Address(rsp, 20));
+  cmpl(edx, 1072693248);
+  jcc(Assembler::equal, L_2TAG_PACKET_7_0_2);
+  movsd(xmm0, Address(rsp, 8));
+  movsd(xmm3, Address(rsp, 8));
+  movdl(edx, xmm3);
+  psrlq(xmm3, 32);
+  movdl(ecx, xmm3);
+  orl(edx, ecx);
+  cmpl(edx, 0);
+  jcc(Assembler::equal, L_2TAG_PACKET_11_0_2);
+  xorpd(xmm3, xmm3);
+  movl(eax, 18416);
+  pinsrw(xmm3, eax, 3);
+  mulsd(xmm0, xmm3);
+  xorpd(xmm2, xmm2);
+  movl(eax, 16368);
+  pinsrw(xmm2, eax, 3);
+  movdqu(xmm3, xmm0);
+  pextrw(eax, xmm0, 3);
+  por(xmm0, xmm2);
+  movl(ecx, 18416);
+  psllq(xmm0, 5);
+  movsd(xmm2, Address(tmp, 8256));
+  psrlq(xmm0, 34);
+  rcpss(xmm0, xmm0);
+  psllq(xmm3, 12);
+  movdqu(xmm6, Address(tmp, 8240));
+  psrlq(xmm3, 12);
+  mulss(xmm0, xmm7);
+  movl(edx, -1024);
+  movdl(xmm5, edx);
+  por(xmm3, xmm1);
+  paddd(xmm0, xmm4);
+  psllq(xmm5, 32);
+  movdl(edx, xmm0);
+  psllq(xmm0, 29);
+  pand(xmm5, xmm3);
+  movl(rsi, 0);
+  pand(xmm0, xmm6);
+  subsd(xmm3, xmm5);
+  andl(eax, 32752);
+  subl(eax, 18416);
+  sarl(eax, 4);
+  cvtsi2sdl(xmm7, eax);
+  mulpd(xmm5, xmm0);
+  jmp(L_2TAG_PACKET_4_0_2);
+
+  bind(L_2TAG_PACKET_12_0_2);
+  movl(ecx, Address(rsp, 16));
+  xorl(edx, edx);
+  testl(ecx, ecx);
+  movl(ecx, 1);
+  cmovl(Assembler::notEqual, edx, ecx);
+  orl(edx, Address(rsp, 20));
+  cmpl(edx, 1072693248);
+  jcc(Assembler::equal, L_2TAG_PACKET_7_0_2);
+  movsd(xmm0, Address(rsp, 8));
+  movsd(xmm3, Address(rsp, 8));
+  movdl(edx, xmm3);
+  psrlq(xmm3, 32);
+  movdl(ecx, xmm3);
+  orl(edx, ecx);
+  cmpl(edx, 0);
+  jcc(Assembler::equal, L_2TAG_PACKET_11_0_2);
+  xorpd(xmm3, xmm3);
+  movl(eax, 18416);
+  pinsrw(xmm3, eax, 3);
+  mulsd(xmm0, xmm3);
+  xorpd(xmm2, xmm2);
+  movl(eax, 16368);
+  pinsrw(xmm2, eax, 3);
+  movdqu(xmm3, xmm0);
+  pextrw(eax, xmm0, 3);
+  por(xmm0, xmm2);
+  movl(ecx, 18416);
+  psllq(xmm0, 5);
+  movsd(xmm2, Address(tmp, 8256));
+  psrlq(xmm0, 34);
+  rcpss(xmm0, xmm0);
+  psllq(xmm3, 12);
+  movdqu(xmm6, Address(tmp, 8240));
+  psrlq(xmm3, 12);
+  mulss(xmm0, xmm7);
+  movl(edx, -1024);
+  movdl(xmm5, edx);
+  por(xmm3, xmm1);
+  paddd(xmm0, xmm4);
+  psllq(xmm5, 32);
+  movdl(edx, xmm0);
+  psllq(xmm0, 29);
+  pand(xmm5, xmm3);
+  movl(rsi, INT_MIN);
+  pand(xmm0, xmm6);
+  subsd(xmm3, xmm5);
+  andl(eax, 32752);
+  subl(eax, 18416);
+  sarl(eax, 4);
+  cvtsi2sdl(xmm7, eax);
+  mulpd(xmm5, xmm0);
+  jmp(L_2TAG_PACKET_4_0_2);
+
+  bind(L_2TAG_PACKET_5_0_2);
+  cmpl(eax, 0);
+  jcc(Assembler::less, L_2TAG_PACKET_13_0_2);
+  cmpl(eax, 752);
+  jcc(Assembler::aboveEqual, L_2TAG_PACKET_14_0_2);
+
+  bind(L_2TAG_PACKET_15_0_2);
+  addsd(xmm0, xmm7);
+  movsd(xmm2, Address(tmp, 12544));
+  addpd(xmm3, xmm0);
+  xorpd(xmm6, xmm6);
+  movl(eax, 17080);
+  pinsrw(xmm6, eax, 3);
+  pshufd(xmm0, xmm3, 238);
+  addsd(xmm0, xmm3);
+  movdqu(xmm3, xmm5);
+  addsd(xmm5, xmm0);
+  movdqu(xmm4, xmm2);
+  subsd(xmm3, xmm5);
+  movdqu(xmm7, xmm5);
+  pand(xmm5, xmm2);
+  movdqu(xmm2, xmm1);
+  pand(xmm4, xmm1);
+  subsd(xmm7, xmm5);
+  addsd(xmm0, xmm3);
+  subsd(xmm1, xmm4);
+  mulsd(xmm4, xmm5);
+  addsd(xmm0, xmm7);
+  mulsd(xmm2, xmm0);
+  movdqu(xmm7, xmm6);
+  mulsd(xmm1, xmm5);
+  addsd(xmm6, xmm4);
+  movdl(eax, xmm6);
+  subsd(xmm6, xmm7);
+  addsd(xmm2, xmm1);
+  movdqu(xmm7, Address(tmp, 12480));
+  movdqu(xmm3, Address(tmp, 12496));
+  subsd(xmm4, xmm6);
+  pextrw(edx, xmm6, 3);
+  movl(ecx, eax);
+  andl(eax, 255);
+  addl(eax, eax);
+  movdqu(xmm5, Address(tmp, eax, Address::times_8, 8384));
+  addsd(xmm2, xmm4);
+  sarl(ecx, 8);
+  movl(eax, ecx);
+  sarl(ecx, 1);
+  subl(eax, ecx);
+  shll(ecx, 20);
+  xorl(ecx, rsi);
+  movdl(xmm6, ecx);
+  movsd(xmm1, Address(tmp, 12512));
+  andl(edx, 32767);
+  cmpl(edx, 16529);
+  jcc(Assembler::above, L_2TAG_PACKET_14_0_2);
+  pshufd(xmm0, xmm2, 68);
+  pshufd(xmm4, xmm2, 68);
+  mulpd(xmm0, xmm0);
+  mulpd(xmm7, xmm4);
+  pshufd(xmm6, xmm6, 17);
+  mulsd(xmm1, xmm2);
+  mulsd(xmm0, xmm0);
+  paddd(xmm5, xmm6);
+  addpd(xmm3, xmm7);
+  mulsd(xmm1, xmm5);
+  pshufd(xmm6, xmm5, 238);
+  mulpd(xmm0, xmm3);
+  addsd(xmm1, xmm6);
+  pshufd(xmm3, xmm0, 238);
+  mulsd(xmm0, xmm5);
+  mulsd(xmm3, xmm5);
+  shll(eax, 4);
+  xorpd(xmm4, xmm4);
+  addl(eax, 16368);
+  pinsrw(xmm4, eax, 3);
+  addsd(xmm0, xmm1);
+  movl(rsi, Address(rsp, 24));
+  addsd(xmm0, xmm3);
+  movdqu(xmm1, xmm0);
+  addsd(xmm0, xmm5);
+  mulsd(xmm0, xmm4);
+  pextrw(eax, xmm0, 3);
+  andl(eax, 32752);
+  jcc(Assembler::equal, L_2TAG_PACKET_16_0_2);
+  cmpl(eax, 32752);
+  jcc(Assembler::equal, L_2TAG_PACKET_17_0_2);
+
+  bind(L_2TAG_PACKET_18_0_2);
+  movsd(Address(rsp, 0), xmm0);
+  fld_d(Address(rsp, 0));
+  jmp(L_2TAG_PACKET_6_0_2);
+
+  bind(L_2TAG_PACKET_8_0_2);
+  movsd(xmm1, Address(rsp, 16));
+  movsd(xmm0, Address(rsp, 8));
+  movdqu(xmm2, xmm0);
+  movdl(eax, xmm2);
+  psrlq(xmm2, 20);
+  movdl(edx, xmm2);
+  orl(eax, edx);
+  jcc(Assembler::equal, L_2TAG_PACKET_19_0_2);
+  addsd(xmm0, xmm0);
+  movdl(eax, xmm1);
+  psrlq(xmm1, 32);
+  movdl(edx, xmm1);
+  movl(ecx, edx);
+  addl(edx, edx);
+  orl(eax, edx);
+  jcc(Assembler::equal, L_2TAG_PACKET_20_0_2);
+  jmp(L_2TAG_PACKET_18_0_2);
+
+  bind(L_2TAG_PACKET_20_0_2);
+  xorpd(xmm0, xmm0);
+  movl(eax, 16368);
+  pinsrw(xmm0, eax, 3);
+  movl(edx, 29);
+  jmp(L_2TAG_PACKET_21_0_2);
+
+  bind(L_2TAG_PACKET_22_0_2);
+  movsd(xmm0, Address(rsp, 16));
+  addpd(xmm0, xmm0);
+  jmp(L_2TAG_PACKET_18_0_2);
+
+  bind(L_2TAG_PACKET_19_0_2);
+  movdl(eax, xmm1);
+  movdqu(xmm2, xmm1);
+  psrlq(xmm1, 32);
+  movdl(edx, xmm1);
+  movl(ecx, edx);
+  addl(edx, edx);
+  orl(eax, edx);
+  jcc(Assembler::equal, L_2TAG_PACKET_23_0_2);
+  pextrw(eax, xmm2, 3);
+  andl(eax, 32752);
+  cmpl(eax, 32752);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_24_0_2);
+  movdl(eax, xmm2);
+  psrlq(xmm2, 20);
+  movdl(edx, xmm2);
+  orl(eax, edx);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_22_0_2);
+
+  bind(L_2TAG_PACKET_24_0_2);
+  pextrw(eax, xmm0, 3);
+  testl(eax, 32768);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_25_0_2);
+  testl(ecx, INT_MIN);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_26_0_2);
+  jmp(L_2TAG_PACKET_18_0_2);
+
+  bind(L_2TAG_PACKET_27_0_2);
+  movsd(xmm1, Address(rsp, 16));
+  movdl(eax, xmm1);
+  testl(eax, 1);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_28_0_2);
+  testl(eax, 2);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_29_0_2);
+  jmp(L_2TAG_PACKET_28_0_2);
+
+  bind(L_2TAG_PACKET_25_0_2);
+  shrl(ecx, 20);
+  andl(ecx, 2047);
+  cmpl(ecx, 1075);
+  jcc(Assembler::above, L_2TAG_PACKET_28_0_2);
+  jcc(Assembler::equal, L_2TAG_PACKET_30_0_2);
+  cmpl(ecx, 1074);
+  jcc(Assembler::above, L_2TAG_PACKET_27_0_2);
+  cmpl(ecx, 1023);
+  jcc(Assembler::below, L_2TAG_PACKET_28_0_2);
+  movsd(xmm1, Address(rsp, 16));
+  movl(eax, 17208);
+  xorpd(xmm3, xmm3);
+  pinsrw(xmm3, eax, 3);
+  movdqu(xmm4, xmm3);
+  addsd(xmm3, xmm1);
+  subsd(xmm4, xmm3);
+  addsd(xmm1, xmm4);
+  pextrw(eax, xmm1, 3);
+  andl(eax, 32752);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_28_0_2);
+  movdl(eax, xmm3);
+  andl(eax, 1);
+  jcc(Assembler::equal, L_2TAG_PACKET_28_0_2);
+
+  bind(L_2TAG_PACKET_29_0_2);
+  movsd(xmm1, Address(rsp, 16));
+  pextrw(eax, xmm1, 3);
+  andl(eax, 32768);
+  jcc(Assembler::equal, L_2TAG_PACKET_18_0_2);
+  xorpd(xmm0, xmm0);
+  movl(eax, 32768);
+  pinsrw(xmm0, eax, 3);
+  jmp(L_2TAG_PACKET_18_0_2);
+
+  bind(L_2TAG_PACKET_28_0_2);
+  movsd(xmm1, Address(rsp, 16));
+  pextrw(eax, xmm1, 3);
+  andl(eax, 32768);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_26_0_2);
+
+  bind(L_2TAG_PACKET_31_0_2);
+  xorpd(xmm0, xmm0);
+  movl(eax, 32752);
+  pinsrw(xmm0, eax, 3);
+  jmp(L_2TAG_PACKET_18_0_2);
+
+  bind(L_2TAG_PACKET_30_0_2);
+  movsd(xmm1, Address(rsp, 16));
+  movdl(eax, xmm1);
+  andl(eax, 1);
+  jcc(Assembler::equal, L_2TAG_PACKET_28_0_2);
+  jmp(L_2TAG_PACKET_29_0_2);
+
+  bind(L_2TAG_PACKET_32_0_2);
+  movdl(eax, xmm1);
+  psrlq(xmm1, 20);
+  movdl(edx, xmm1);
+  orl(eax, edx);
+  jcc(Assembler::equal, L_2TAG_PACKET_33_0_2);
+  movsd(xmm0, Address(rsp, 16));
+  addsd(xmm0, xmm0);
+  jmp(L_2TAG_PACKET_18_0_2);
+
+  bind(L_2TAG_PACKET_33_0_2);
+  movsd(xmm0, Address(rsp, 8));
+  pextrw(eax, xmm0, 3);
+  cmpl(eax, 49136);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_34_0_2);
+  movdl(ecx, xmm0);
+  psrlq(xmm0, 20);
+  movdl(edx, xmm0);
+  orl(ecx, edx);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_34_0_2);
+  xorpd(xmm0, xmm0);
+  movl(eax, 32760);
+  pinsrw(xmm0, eax, 3);
+  jmp(L_2TAG_PACKET_18_0_2);
+
+  bind(L_2TAG_PACKET_34_0_2);
+  movsd(xmm1, Address(rsp, 16));
+  andl(eax, 32752);
+  subl(eax, 16368);
+  pextrw(edx, xmm1, 3);
+  xorpd(xmm0, xmm0);
+  xorl(eax, edx);
+  andl(eax, 32768);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_18_0_2);
+  movl(ecx, 32752);
+  pinsrw(xmm0, ecx, 3);
+  jmp(L_2TAG_PACKET_18_0_2);
+
+  bind(L_2TAG_PACKET_35_0_2);
+  movdl(eax, xmm1);
+  cmpl(edx, 17184);
+  jcc(Assembler::above, L_2TAG_PACKET_36_0_2);
+  testl(eax, 1);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_37_0_2);
+  testl(eax, 2);
+  jcc(Assembler::equal, L_2TAG_PACKET_38_0_2);
+  jmp(L_2TAG_PACKET_39_0_2);
+
+  bind(L_2TAG_PACKET_36_0_2);
+  testl(eax, 1);
+  jcc(Assembler::equal, L_2TAG_PACKET_38_0_2);
+  jmp(L_2TAG_PACKET_39_0_2);
+
+  bind(L_2TAG_PACKET_9_0_2);
+  movsd(xmm2, Address(rsp, 8));
+  movdl(eax, xmm2);
+  psrlq(xmm2, 31);
+  movdl(ecx, xmm2);
+  orl(eax, ecx);
+  jcc(Assembler::equal, L_2TAG_PACKET_11_0_2);
+  movsd(xmm1, Address(rsp, 16));
+  pextrw(edx, xmm1, 3);
+  movdl(eax, xmm1);
+  movdqu(xmm2, xmm1);
+  psrlq(xmm2, 32);
+  movdl(ecx, xmm2);
+  addl(ecx, ecx);
+  orl(ecx, eax);
+  jcc(Assembler::equal, L_2TAG_PACKET_40_0_2);
+  andl(edx, 32752);
+  cmpl(edx, 32752);
+  jcc(Assembler::equal, L_2TAG_PACKET_32_0_2);
+  cmpl(edx, 17200);
+  jcc(Assembler::above, L_2TAG_PACKET_38_0_2);
+  cmpl(edx, 17184);
+  jcc(Assembler::aboveEqual, L_2TAG_PACKET_35_0_2);
+  cmpl(edx, 16368);
+  jcc(Assembler::below, L_2TAG_PACKET_37_0_2);
+  movl(eax, 17208);
+  xorpd(xmm2, xmm2);
+  pinsrw(xmm2, eax, 3);
+  movdqu(xmm4, xmm2);
+  addsd(xmm2, xmm1);
+  subsd(xmm4, xmm2);
+  addsd(xmm1, xmm4);
+  pextrw(eax, xmm1, 3);
+  andl(eax, 32767);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_37_0_2);
+  movdl(eax, xmm2);
+  andl(eax, 1);
+  jcc(Assembler::equal, L_2TAG_PACKET_38_0_2);
+
+  bind(L_2TAG_PACKET_39_0_2);
+  xorpd(xmm1, xmm1);
+  movl(edx, 30704);
+  pinsrw(xmm1, edx, 3);
+  movsd(xmm2, Address(tmp, 8256));
+  movsd(xmm4, Address(rsp, 8));
+  pextrw(eax, xmm4, 3);
+  movl(edx, 8192);
+  movdl(xmm4, edx);
+  andl(eax, 32767);
+  subl(eax, 16);
+  jcc(Assembler::less, L_2TAG_PACKET_12_0_2);
+  movl(edx, eax);
+  andl(edx, 32752);
+  subl(edx, 16368);
+  movl(ecx, edx);
+  sarl(edx, 31);
+  addl(ecx, edx);
+  xorl(ecx, edx);
+  addl(ecx, 16);
+  bsrl(ecx, ecx);
+  movl(rsi, INT_MIN);
+  jmp(L_2TAG_PACKET_1_0_2);
+
+  bind(L_2TAG_PACKET_37_0_2);
+  xorpd(xmm1, xmm1);
+  movl(eax, 32752);
+  pinsrw(xmm1, eax, 3);
+  xorpd(xmm0, xmm0);
+  mulsd(xmm0, xmm1);
+  movl(edx, 28);
+  jmp(L_2TAG_PACKET_21_0_2);
+
+  bind(L_2TAG_PACKET_38_0_2);
+  xorpd(xmm1, xmm1);
+  movl(edx, 30704);
+  pinsrw(xmm1, edx, 3);
+  movsd(xmm2, Address(tmp, 8256));
+  movsd(xmm4, Address(rsp, 8));
+  pextrw(eax, xmm4, 3);
+  movl(edx, 8192);
+  movdl(xmm4, edx);
+  andl(eax, 32767);
+  subl(eax, 16);
+  jcc(Assembler::less, L_2TAG_PACKET_10_0_2);
+  movl(edx, eax);
+  andl(edx, 32752);
+  subl(edx, 16368);
+  movl(ecx, edx);
+  sarl(edx, 31);
+  addl(ecx, edx);
+  xorl(ecx, edx);
+  addl(ecx, 16);
+  bsrl(ecx, ecx);
+  movl(rsi, 0);
+  jmp(L_2TAG_PACKET_1_0_2);
+
+  bind(L_2TAG_PACKET_23_0_2);
+  xorpd(xmm0, xmm0);
+  movl(eax, 16368);
+  pinsrw(xmm0, eax, 3);
+  jmp(L_2TAG_PACKET_18_0_2);
+
+  bind(L_2TAG_PACKET_26_0_2);
+  xorpd(xmm0, xmm0);
+  jmp(L_2TAG_PACKET_18_0_2);
+
+  bind(L_2TAG_PACKET_13_0_2);
+  addl(eax, 384);
+  cmpl(eax, 0);
+  jcc(Assembler::less, L_2TAG_PACKET_41_0_2);
+  mulsd(xmm5, xmm1);
+  addsd(xmm0, xmm7);
+  shrl(rsi, 31);
+  addpd(xmm3, xmm0);
+  pshufd(xmm0, xmm3, 238);
+  addsd(xmm3, xmm0);
+  movsd(xmm4, Address(tmp, rsi, Address::times_8, 12528));
+  mulsd(xmm1, xmm3);
+  xorpd(xmm0, xmm0);
+  movl(eax, 16368);
+  shll(rsi, 15);
+  orl(eax, rsi);
+  pinsrw(xmm0, eax, 3);
+  addsd(xmm5, xmm1);
+  movl(rsi, Address(rsp, 24));
+  mulsd(xmm5, xmm4);
+  addsd(xmm0, xmm5);
+  jmp(L_2TAG_PACKET_18_0_2);
+
+  bind(L_2TAG_PACKET_41_0_2);
+  movl(rsi, Address(rsp, 24));
+  xorpd(xmm0, xmm0);
+  movl(eax, 16368);
+  pinsrw(xmm0, eax, 3);
+  jmp(L_2TAG_PACKET_18_0_2);
+
+  bind(L_2TAG_PACKET_40_0_2);
+  xorpd(xmm0, xmm0);
+  movl(eax, 16368);
+  pinsrw(xmm0, eax, 3);
+  jmp(L_2TAG_PACKET_18_0_2);
+
+  bind(L_2TAG_PACKET_42_0_2);
+  xorpd(xmm0, xmm0);
+  movl(eax, 16368);
+  pinsrw(xmm0, eax, 3);
+  movl(edx, 26);
+  jmp(L_2TAG_PACKET_21_0_2);
+
+  bind(L_2TAG_PACKET_11_0_2);
+  movsd(xmm1, Address(rsp, 16));
+  movdqu(xmm2, xmm1);
+  pextrw(eax, xmm1, 3);
+  andl(eax, 32752);
+  cmpl(eax, 32752);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_43_0_2);
+  movdl(eax, xmm2);
+  psrlq(xmm2, 20);
+  movdl(edx, xmm2);
+  orl(eax, edx);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_22_0_2);
+
+  bind(L_2TAG_PACKET_43_0_2);
+  movdl(eax, xmm1);
+  psrlq(xmm1, 32);
+  movdl(edx, xmm1);
+  movl(ecx, edx);
+  addl(edx, edx);
+  orl(eax, edx);
+  jcc(Assembler::equal, L_2TAG_PACKET_42_0_2);
+  shrl(edx, 21);
+  cmpl(edx, 1075);
+  jcc(Assembler::above, L_2TAG_PACKET_44_0_2);
+  jcc(Assembler::equal, L_2TAG_PACKET_45_0_2);
+  cmpl(edx, 1023);
+  jcc(Assembler::below, L_2TAG_PACKET_44_0_2);
+  movsd(xmm1, Address(rsp, 16));
+  movl(eax, 17208);
+  xorpd(xmm3, xmm3);
+  pinsrw(xmm3, eax, 3);
+  movdqu(xmm4, xmm3);
+  addsd(xmm3, xmm1);
+  subsd(xmm4, xmm3);
+  addsd(xmm1, xmm4);
+  pextrw(eax, xmm1, 3);
+  andl(eax, 32752);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_44_0_2);
+  movdl(eax, xmm3);
+  andl(eax, 1);
+  jcc(Assembler::equal, L_2TAG_PACKET_44_0_2);
+
+  bind(L_2TAG_PACKET_46_0_2);
+  movsd(xmm0, Address(rsp, 8));
+  testl(ecx, INT_MIN);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_47_0_2);
+  jmp(L_2TAG_PACKET_18_0_2);
+
+  bind(L_2TAG_PACKET_45_0_2);
+  movsd(xmm1, Address(rsp, 16));
+  movdl(eax, xmm1);
+  testl(eax, 1);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_46_0_2);
+
+  bind(L_2TAG_PACKET_44_0_2);
+  testl(ecx, INT_MIN);
+  jcc(Assembler::equal, L_2TAG_PACKET_26_0_2);
+  xorpd(xmm0, xmm0);
+
+  bind(L_2TAG_PACKET_47_0_2);
+  movl(eax, 16368);
+  xorpd(xmm1, xmm1);
+  pinsrw(xmm1, eax, 3);
+  divsd(xmm1, xmm0);
+  movdqu(xmm0, xmm1);
+  movl(edx, 27);
+  jmp(L_2TAG_PACKET_21_0_2);
+
+  bind(L_2TAG_PACKET_14_0_2);
+  movsd(xmm2, Address(rsp, 8));
+  movsd(xmm6, Address(rsp, 16));
+  pextrw(eax, xmm2, 3);
+  pextrw(edx, xmm6, 3);
+  movl(ecx, 32752);
+  andl(ecx, edx);
+  cmpl(ecx, 32752);
+  jcc(Assembler::equal, L_2TAG_PACKET_48_0_2);
+  andl(eax, 32752);
+  subl(eax, 16368);
+  xorl(edx, eax);
+  testl(edx, 32768);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_49_0_2);
+
+  bind(L_2TAG_PACKET_50_0_2);
+  movl(eax, 32736);
+  pinsrw(xmm0, eax, 3);
+  shrl(rsi, 16);
+  orl(eax, rsi);
+  pinsrw(xmm1, eax, 3);
+  movl(rsi, Address(rsp, 24));
+  mulsd(xmm0, xmm1);
+
+  bind(L_2TAG_PACKET_17_0_2);
+  movl(edx, 24);
+
+  bind(L_2TAG_PACKET_21_0_2);
+  movsd(Address(rsp, 0), xmm0);
+  fld_d(Address(rsp, 0));
+  jmp(L_2TAG_PACKET_6_0_2);
+
+  bind(L_2TAG_PACKET_49_0_2);
+  movl(eax, 16);
+  pinsrw(xmm0, eax, 3);
+  mulsd(xmm0, xmm0);
+  testl(rsi, INT_MIN);
+  jcc(Assembler::equal, L_2TAG_PACKET_51_0_2);
+  movsd(xmm2, Address(tmp, 12560));
+  xorpd(xmm0, xmm2);
+
+  bind(L_2TAG_PACKET_51_0_2);
+  movl(rsi, Address(rsp, 24));
+  movl(edx, 25);
+  jmp(L_2TAG_PACKET_21_0_2);
+
+  bind(L_2TAG_PACKET_16_0_2);
+  pextrw(ecx, xmm5, 3);
+  pextrw(edx, xmm4, 3);
+  movl(eax, -1);
+  andl(ecx, 32752);
+  subl(ecx, 16368);
+  andl(edx, 32752);
+  addl(edx, ecx);
+  movl(ecx, -31);
+  sarl(edx, 4);
+  subl(ecx, edx);
+  jcc(Assembler::lessEqual, L_2TAG_PACKET_52_0_2);
+  cmpl(ecx, 20);
+  jcc(Assembler::above, L_2TAG_PACKET_53_0_2);
+  shll(eax);
+
+  bind(L_2TAG_PACKET_52_0_2);
+  movdl(xmm0, eax);
+  psllq(xmm0, 32);
+  pand(xmm0, xmm5);
+  subsd(xmm5, xmm0);
+  addsd(xmm5, xmm1);
+  mulsd(xmm0, xmm4);
+  mulsd(xmm5, xmm4);
+  addsd(xmm0, xmm5);
+
+  bind(L_2TAG_PACKET_53_0_2);
+  movl(edx, 25);
+  jmp(L_2TAG_PACKET_21_0_2);
+
+  bind(L_2TAG_PACKET_2_0_2);
+  movzwl(ecx, Address(rsp, 22));
+  movl(edx, INT_MIN);
+  movdl(xmm1, edx);
+  xorpd(xmm7, xmm7);
+  paddd(xmm0, xmm4);
+  psllq(xmm5, 32);
+  movdl(edx, xmm0);
+  psllq(xmm0, 29);
+  paddq(xmm1, xmm3);
+  pand(xmm5, xmm1);
+  andl(ecx, 32752);
+  cmpl(ecx, 16560);
+  jcc(Assembler::below, L_2TAG_PACKET_3_0_2);
+  pand(xmm0, xmm6);
+  subsd(xmm3, xmm5);
+  addl(eax, 16351);
+  shrl(eax, 4);
+  subl(eax, 1022);
+  cvtsi2sdl(xmm7, eax);
+  mulpd(xmm5, xmm0);
+  movsd(xmm4, Address(tmp, 0));
+  mulsd(xmm3, xmm0);
+  movsd(xmm6, Address(tmp, 0));
+  subsd(xmm5, xmm2);
+  movsd(xmm1, Address(tmp, 8));
+  pshufd(xmm2, xmm3, 68);
+  unpcklpd(xmm5, xmm3);
+  addsd(xmm3, xmm5);
+  movsd(xmm0, Address(tmp, 8));
+  andl(edx, 16760832);
+  shrl(edx, 10);
+  addpd(xmm7, Address(tmp, edx, Address::times_1, -3616));
+  mulsd(xmm4, xmm5);
+  mulsd(xmm0, xmm5);
+  mulsd(xmm6, xmm2);
+  mulsd(xmm1, xmm2);
+  movdqu(xmm2, xmm5);
+  mulsd(xmm4, xmm5);
+  addsd(xmm5, xmm0);
+  movdqu(xmm0, xmm7);
+  addsd(xmm2, xmm3);
+  addsd(xmm7, xmm5);
+  mulsd(xmm6, xmm2);
+  subsd(xmm0, xmm7);
+  movdqu(xmm2, xmm7);
+  addsd(xmm7, xmm4);
+  addsd(xmm0, xmm5);
+  subsd(xmm2, xmm7);
+  addsd(xmm4, xmm2);
+  pshufd(xmm2, xmm5, 238);
+  movdqu(xmm5, xmm7);
+  addsd(xmm7, xmm2);
+  addsd(xmm4, xmm0);
+  movdqu(xmm0, Address(tmp, 8272));
+  subsd(xmm5, xmm7);
+  addsd(xmm6, xmm4);
+  movdqu(xmm4, xmm7);
+  addsd(xmm5, xmm2);
+  addsd(xmm7, xmm1);
+  movdqu(xmm2, Address(tmp, 8336));
+  subsd(xmm4, xmm7);
+  addsd(xmm6, xmm5);
+  addsd(xmm4, xmm1);
+  pshufd(xmm5, xmm7, 238);
+  movdqu(xmm1, xmm7);
+  addsd(xmm7, xmm5);
+  subsd(xmm1, xmm7);
+  addsd(xmm1, xmm5);
+  movdqu(xmm5, Address(tmp, 8352));
+  pshufd(xmm3, xmm3, 68);
+  addsd(xmm6, xmm4);
+  addsd(xmm6, xmm1);
+  movdqu(xmm1, Address(tmp, 8304));
+  mulpd(xmm0, xmm3);
+  mulpd(xmm2, xmm3);
+  pshufd(xmm4, xmm3, 68);
+  mulpd(xmm3, xmm3);
+  addpd(xmm0, xmm1);
+  addpd(xmm5, xmm2);
+  mulsd(xmm4, xmm3);
+  movsd(xmm2, Address(tmp, 16));
+  mulpd(xmm3, xmm3);
+  movsd(xmm1, Address(rsp, 16));
+  movzwl(ecx, Address(rsp, 22));
+  mulpd(xmm0, xmm4);
+  pextrw(eax, xmm7, 3);
+  mulpd(xmm5, xmm4);
+  mulpd(xmm0, xmm3);
+  movsd(xmm4, Address(tmp, 8376));
+  pand(xmm2, xmm7);
+  addsd(xmm5, xmm6);
+  subsd(xmm7, xmm2);
+  addpd(xmm5, xmm0);
+  andl(eax, 32752);
+  subl(eax, 16368);
+  andl(ecx, 32752);
+  cmpl(ecx, 32752);
+  jcc(Assembler::equal, L_2TAG_PACKET_48_0_2);
+  addl(ecx, eax);
+  cmpl(ecx, 16576);
+  jcc(Assembler::aboveEqual, L_2TAG_PACKET_54_0_2);
+  pshufd(xmm0, xmm5, 238);
+  pand(xmm4, xmm1);
+  movdqu(xmm3, xmm1);
+  addsd(xmm5, xmm0);
+  subsd(xmm1, xmm4);
+  xorpd(xmm6, xmm6);
+  movl(edx, 17080);
+  pinsrw(xmm6, edx, 3);
+  addsd(xmm7, xmm5);
+  mulsd(xmm4, xmm2);
+  mulsd(xmm1, xmm2);
+  movdqu(xmm5, xmm6);
+  mulsd(xmm3, xmm7);
+  addsd(xmm6, xmm4);
+  addsd(xmm1, xmm3);
+  movdqu(xmm7, Address(tmp, 12480));
+  movdl(edx, xmm6);
+  subsd(xmm6, xmm5);
+  movdqu(xmm3, Address(tmp, 12496));
+  movsd(xmm2, Address(tmp, 12512));
+  subsd(xmm4, xmm6);
+  movl(ecx, edx);
+  andl(edx, 255);
+  addl(edx, edx);
+  movdqu(xmm5, Address(tmp, edx, Address::times_8, 8384));
+  addsd(xmm4, xmm1);
+  pextrw(edx, xmm6, 3);
+  shrl(ecx, 8);
+  movl(eax, ecx);
+  shrl(ecx, 1);
+  subl(eax, ecx);
+  shll(ecx, 20);
+  movdl(xmm6, ecx);
+  pshufd(xmm0, xmm4, 68);
+  pshufd(xmm1, xmm4, 68);
+  mulpd(xmm0, xmm0);
+  mulpd(xmm7, xmm1);
+  pshufd(xmm6, xmm6, 17);
+  mulsd(xmm2, xmm4);
+  andl(edx, 32767);
+  cmpl(edx, 16529);
+  jcc(Assembler::above, L_2TAG_PACKET_14_0_2);
+  mulsd(xmm0, xmm0);
+  paddd(xmm5, xmm6);
+  addpd(xmm3, xmm7);
+  mulsd(xmm2, xmm5);
+  pshufd(xmm6, xmm5, 238);
+  mulpd(xmm0, xmm3);
+  addsd(xmm2, xmm6);
+  pshufd(xmm3, xmm0, 238);
+  addl(eax, 1023);
+  shll(eax, 20);
+  orl(eax, rsi);
+  movdl(xmm4, eax);
+  mulsd(xmm0, xmm5);
+  mulsd(xmm3, xmm5);
+  addsd(xmm0, xmm2);
+  psllq(xmm4, 32);
+  addsd(xmm0, xmm3);
+  movdqu(xmm1, xmm0);
+  addsd(xmm0, xmm5);
+  movl(rsi, Address(rsp, 24));
+  mulsd(xmm0, xmm4);
+  pextrw(eax, xmm0, 3);
+  andl(eax, 32752);
+  jcc(Assembler::equal, L_2TAG_PACKET_16_0_2);
+  cmpl(eax, 32752);
+  jcc(Assembler::equal, L_2TAG_PACKET_17_0_2);
+
+  bind(L_2TAG_PACKET_55_0_2);
+  movsd(Address(rsp, 0), xmm0);
+  fld_d(Address(rsp, 0));
+  jmp(L_2TAG_PACKET_6_0_2);
+
+  bind(L_2TAG_PACKET_48_0_2);
+  movl(rsi, Address(rsp, 24));
+
+  bind(L_2TAG_PACKET_56_0_2);
+  movsd(xmm0, Address(rsp, 8));
+  movsd(xmm1, Address(rsp, 16));
+  addsd(xmm1, xmm1);
+  xorpd(xmm2, xmm2);
+  movl(eax, 49136);
+  pinsrw(xmm2, eax, 3);
+  addsd(xmm2, xmm0);
+  pextrw(eax, xmm2, 3);
+  cmpl(eax, 0);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_57_0_2);
+  xorpd(xmm0, xmm0);
+  movl(eax, 32760);
+  pinsrw(xmm0, eax, 3);
+  jmp(L_2TAG_PACKET_18_0_2);
+
+  bind(L_2TAG_PACKET_57_0_2);
+  movdl(edx, xmm1);
+  movdqu(xmm3, xmm1);
+  psrlq(xmm3, 20);
+  movdl(ecx, xmm3);
+  orl(ecx, edx);
+  jcc(Assembler::equal, L_2TAG_PACKET_58_0_2);
+  addsd(xmm1, xmm1);
+  movdqu(xmm0, xmm1);
+  jmp(L_2TAG_PACKET_18_0_2);
+
+  bind(L_2TAG_PACKET_58_0_2);
+  pextrw(eax, xmm0, 3);
+  andl(eax, 32752);
+  pextrw(edx, xmm1, 3);
+  xorpd(xmm0, xmm0);
+  subl(eax, 16368);
+  xorl(eax, edx);
+  testl(eax, 32768);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_18_0_2);
+  movl(edx, 32752);
+  pinsrw(xmm0, edx, 3);
+  jmp(L_2TAG_PACKET_18_0_2);
+
+  bind(L_2TAG_PACKET_54_0_2);
+  pextrw(eax, xmm1, 3);
+  pextrw(ecx, xmm2, 3);
+  xorl(eax, ecx);
+  testl(eax, 32768);
+  jcc(Assembler::equal, L_2TAG_PACKET_50_0_2);
+  jmp(L_2TAG_PACKET_49_0_2);
+
+  bind(L_2TAG_PACKET_6_0_2);
+  movl(tmp, Address(rsp, 64));
+
+}
+
+/******************************************************************************/
+//                     ALGORITHM DESCRIPTION - SIN()
+//                     ---------------------
+//
+//     1. RANGE REDUCTION
+//
+//     We perform an initial range reduction from X to r with
+//
+//          X =~= N * pi/32 + r
+//
+//     so that |r| <= pi/64 + epsilon. We restrict inputs to those
+//     where |N| <= 932560. Beyond this, the range reduction is
+//     insufficiently accurate. For extremely small inputs,
+//     denormalization can occur internally, impacting performance.
+//     This means that the main path is actually only taken for
+//     2^-252 <= |X| < 90112.
+//
+//     To avoid branches, we perform the range reduction to full
+//     accuracy each time.
+//
+//          X - N * (P_1 + P_2 + P_3)
+//
+//     where P_1 and P_2 are 32-bit numbers (so multiplication by N
+//     is exact) and P_3 is a 53-bit number. Together, these
+//     approximate pi well enough for all cases in the restricted
+//     range.
+//
+//     The main reduction sequence is:
+//
+//             y = 32/pi * x
+//             N = integer(y)
+//     (computed by adding and subtracting off SHIFTER)
+//
+//             m_1 = N * P_1
+//             m_2 = N * P_2
+//             r_1 = x - m_1
+//             r = r_1 - m_2
+//     (this r can be used for most of the calculation)
+//
+//             c_1 = r_1 - r
+//             m_3 = N * P_3
+//             c_2 = c_1 - m_2
+//             c = c_2 - m_3
+//
+//     2. MAIN ALGORITHM
+//
+//     The algorithm uses a table lookup based on B = M * pi / 32
+//     where M = N mod 64. The stored values are:
+//       sigma             closest power of 2 to cos(B)
+//       C_hl              53-bit cos(B) - sigma
+//       S_hi + S_lo       2 * 53-bit sin(B)
+//
+//     The computation is organized as follows:
+//
+//          sin(B + r + c) = [sin(B) + sigma * r] +
+//                           r * (cos(B) - sigma) +
+//                           sin(B) * [cos(r + c) - 1] +
+//                           cos(B) * [sin(r + c) - r]
+//
+//     which is approximately:
+//
+//          [S_hi + sigma * r] +
+//          C_hl * r +
+//          S_lo + S_hi * [(cos(r) - 1) - r * c] +
+//          (C_hl + sigma) * [(sin(r) - r) + c]
+//
+//     and this is what is actually computed. We separate this sum
+//     into four parts:
+//
+//          hi + med + pols + corr
+//
+//     where
+//
+//          hi       = S_hi + sigma r
+//          med      = C_hl * r
+//          pols     = S_hi * (cos(r) - 1) + (C_hl + sigma) * (sin(r) - r)
+//          corr     = S_lo + c * ((C_hl + sigma) - S_hi * r)
+//
+//     3. POLYNOMIAL
+//
+//     The polynomial S_hi * (cos(r) - 1) + (C_hl + sigma) *
+//     (sin(r) - r) can be rearranged freely, since it is quite
+//     small, so we exploit parallelism to the fullest.
+//
+//          psc4       =   SC_4 * r_1
+//          msc4       =   psc4 * r
+//          r2         =   r * r
+//          msc2       =   SC_2 * r2
+//          r4         =   r2 * r2
+//          psc3       =   SC_3 + msc4
+//          psc1       =   SC_1 + msc2
+//          msc3       =   r4 * psc3
+//          sincospols =   psc1 + msc3
+//          pols       =   sincospols *
+//                         <S_hi * r^2 | (C_hl + sigma) * r^3>
+//
+//     4. CORRECTION TERM
+//
+//     This is where the "c" component of the range reduction is
+//     taken into account; recall that just "r" is used for most of
+//     the calculation.
+//
+//          -c   = m_3 - c_2
+//          -d   = S_hi * r - (C_hl + sigma)
+//          corr = -c * -d + S_lo
+//
+//     5. COMPENSATED SUMMATIONS
+//
+//     The two successive compensated summations add up the high
+//     and medium parts, leaving just the low parts to add up at
+//     the end.
+//
+//          rs        =  sigma * r
+//          res_int   =  S_hi + rs
+//          k_0       =  S_hi - res_int
+//          k_2       =  k_0 + rs
+//          med       =  C_hl * r
+//          res_hi    =  res_int + med
+//          k_1       =  res_int - res_hi
+//          k_3       =  k_1 + med
+//
+//     6. FINAL SUMMATION
+//
+//     We now add up all the small parts:
+//
+//          res_lo = pols(hi) + pols(lo) + corr + k_1 + k_3
+//
+//     Now the overall result is just:
+//
+//          res_hi + res_lo
+//
+//     7. SMALL ARGUMENTS
+//
+//     If |x| < SNN (SNN meaning the smallest normal number), we
+//     simply perform 0.1111111 cdots 1111 * x. For SNN <= |x|, we
+//     do 2^-55 * (2^55 * x - x).
+//
+// Special cases:
+//  sin(NaN) = quiet NaN, and raise invalid exception
+//  sin(INF) = NaN and raise invalid exception
+//  sin(+/-0) = +/-0
+//
+/******************************************************************************/
+
+ALIGNED_(8) juint _zero_none[] =
+{
+    0x00000000UL, 0x00000000UL, 0x00000000UL, 0xbff00000UL
+};
+
+ALIGNED_(4) juint __4onpi_d[] =
+{
+    0x6dc9c883UL, 0x3ff45f30UL
+};
+
+ALIGNED_(4) juint _TWO_32H[] =
+{
+    0x00000000UL, 0x41f80000UL
+};
+
+ALIGNED_(4) juint _pi04_3d[] =
+{
+    0x54442d00UL, 0x3fe921fbUL, 0x98cc5180UL, 0x3ce84698UL, 0xcbb5bf6cUL,
+    0xb9dfc8f8UL
+};
+
+ALIGNED_(4) juint _pi04_5d[] =
+{
+    0x54400000UL, 0x3fe921fbUL, 0x1a600000UL, 0x3dc0b461UL, 0x2e000000UL,
+    0x3b93198aUL, 0x25200000UL, 0x396b839aUL, 0x533e63a0UL, 0x37027044UL
+};
+
+ALIGNED_(4) juint _SCALE[] =
+{
+    0x00000000UL, 0x32600000UL
+};
+
+ALIGNED_(4) juint _zeros[] =
+{
+    0x00000000UL, 0x00000000UL, 0x00000000UL, 0x80000000UL
+};
+
+ALIGNED_(4) juint _pi04_2d[] =
+{
+    0x54400000UL, 0x3fe921fbUL, 0x1a626331UL, 0x3dc0b461UL
+};
+
+ALIGNED_(4) juint _TWO_12H[] =
+{
+    0x00000000UL, 0x40b80000UL
+};
+
+ALIGNED_(2) jushort __4onpi_31l[] =
+{
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x836e, 0xa2f9,
+    0x40d8, 0x0000, 0x0000, 0x0000, 0x2a50, 0x9c88, 0x40b7, 0x0000, 0x0000, 0x0000,
+    0xabe8, 0xfe13, 0x4099, 0x0000, 0x0000, 0x0000, 0x6ee0, 0xfa9a, 0x4079, 0x0000,
+    0x0000, 0x0000, 0x9580, 0xdb62, 0x4058, 0x0000, 0x0000, 0x0000, 0x1c82, 0xc9e2,
+    0x403d, 0x0000, 0x0000, 0x0000, 0xb1c0, 0xff28, 0x4019, 0x0000, 0x0000, 0x0000,
+    0xef14, 0xaf7a, 0x3ffe, 0x0000, 0x0000, 0x0000, 0x48dc, 0xc36e, 0x3fdf, 0x0000,
+    0x0000, 0x0000, 0x3740, 0xe909, 0x3fbe, 0x0000, 0x0000, 0x0000, 0x924a, 0xb801,
+    0x3fa2, 0x0000, 0x0000, 0x0000, 0x3a32, 0xdd41, 0x3f83, 0x0000, 0x0000, 0x0000,
+    0x8778, 0x873f, 0x3f62, 0x0000, 0x0000, 0x0000, 0x1298, 0xb1cb, 0x3f44, 0x0000,
+    0x0000, 0x0000, 0xa208, 0x9cfb, 0x3f26, 0x0000, 0x0000, 0x0000, 0xbaec, 0xd7d4,
+    0x3f06, 0x0000, 0x0000, 0x0000, 0xd338, 0x8909, 0x3ee7, 0x0000, 0x0000, 0x0000,
+    0x68b8, 0xe04d, 0x3ec7, 0x0000, 0x0000, 0x0000, 0x4e64, 0xdf90, 0x3eaa, 0x0000,
+    0x0000, 0x0000, 0xc1a8, 0xeb1c, 0x3e89, 0x0000, 0x0000, 0x0000, 0x2720, 0xce7d,
+    0x3e6a, 0x0000, 0x0000, 0x0000, 0x77b8, 0x8bf1, 0x3e4b, 0x0000, 0x0000, 0x0000,
+    0xec7e, 0xe4a0, 0x3e2e, 0x0000, 0x0000, 0x0000, 0xffbc, 0xf12f, 0x3e0f, 0x0000,
+    0x0000, 0x0000, 0xfdc0, 0xb301, 0x3deb, 0x0000, 0x0000, 0x0000, 0xc5ac, 0x9788,
+    0x3dd1, 0x0000, 0x0000, 0x0000, 0x47da, 0x829b, 0x3db2, 0x0000, 0x0000, 0x0000,
+    0xd9e4, 0xa6cf, 0x3d93, 0x0000, 0x0000, 0x0000, 0x36e8, 0xf961, 0x3d73, 0x0000,
+    0x0000, 0x0000, 0xf668, 0xf463, 0x3d54, 0x0000, 0x0000, 0x0000, 0x5168, 0xf2ff,
+    0x3d35, 0x0000, 0x0000, 0x0000, 0x758e, 0xea4f, 0x3d17, 0x0000, 0x0000, 0x0000,
+    0xf17a, 0xebe5, 0x3cf8, 0x0000, 0x0000, 0x0000, 0x9cfa, 0x9e83, 0x3cd9, 0x0000,
+    0x0000, 0x0000, 0xa4ba, 0xe294, 0x3cba, 0x0000, 0x0000, 0x0000, 0xd7ec, 0x9afe,
+    0x3c9a, 0x0000, 0x0000, 0x0000, 0xae80, 0x8fc6, 0x3c79, 0x0000, 0x0000, 0x0000,
+    0x3304, 0x8560, 0x3c5c, 0x0000, 0x0000, 0x0000, 0x6d70, 0xdf8f, 0x3c3b, 0x0000,
+    0x0000, 0x0000, 0x3ef0, 0xafc3, 0x3c1e, 0x0000, 0x0000, 0x0000, 0xd0d8, 0x826b,
+    0x3bfe, 0x0000, 0x0000, 0x0000, 0x1c80, 0xed4f, 0x3bdd, 0x0000, 0x0000, 0x0000,
+    0x730c, 0xb0af, 0x3bc1, 0x0000, 0x0000, 0x0000, 0x6660, 0xc219, 0x3ba2, 0x0000,
+    0x0000, 0x0000, 0x940c, 0xabe2, 0x3b83, 0x0000, 0x0000, 0x0000, 0xdffc, 0x8408,
+    0x3b64, 0x0000, 0x0000, 0x0000, 0x6b98, 0xc402, 0x3b45, 0x0000, 0x0000, 0x0000,
+    0x1818, 0x9cc4, 0x3b26, 0x0000, 0x0000, 0x0000, 0x5390, 0xaab6, 0x3b05, 0x0000,
+    0x0000, 0x0000, 0xb070, 0xd464, 0x3ae9, 0x0000, 0x0000, 0x0000, 0x231a, 0x9ef0,
+    0x3aca, 0x0000, 0x0000, 0x0000, 0x0670, 0xd1f1, 0x3aaa, 0x0000, 0x0000, 0x0000,
+    0x7738, 0xd9f3, 0x3a8a, 0x0000, 0x0000, 0x0000, 0xa834, 0x8092, 0x3a6c, 0x0000,
+    0x0000, 0x0000, 0xb45c, 0xce23, 0x3a4d, 0x0000, 0x0000, 0x0000, 0x36e8, 0xb0e5,
+    0x3a2d, 0x0000, 0x0000, 0x0000, 0xd156, 0xaf44, 0x3a10, 0x0000, 0x0000, 0x0000,
+    0x9f52, 0x8c82, 0x39f1, 0x0000, 0x0000, 0x0000, 0x829c, 0xff83, 0x39d1, 0x0000,
+    0x0000, 0x0000, 0x7d06, 0xefc6, 0x39b3, 0x0000, 0x0000, 0x0000, 0x93e0, 0xb0b7,
+    0x3992, 0x0000, 0x0000, 0x0000, 0xedde, 0xc193, 0x3975, 0x0000, 0x0000, 0x0000,
+    0xbbc0, 0xcf49, 0x3952, 0x0000, 0x0000, 0x0000, 0xbdf0, 0xd63c, 0x3937, 0x0000,
+    0x0000, 0x0000, 0x1f34, 0x9f3a, 0x3918, 0x0000, 0x0000, 0x0000, 0x3f8e, 0xe579,
+    0x38f9, 0x0000, 0x0000, 0x0000, 0x90c8, 0xc3f8, 0x38d9, 0x0000, 0x0000, 0x0000,
+    0x48c0, 0xf8f8, 0x38b7, 0x0000, 0x0000, 0x0000, 0xed56, 0xafa6, 0x389c, 0x0000,
+    0x0000, 0x0000, 0x8218, 0xb969, 0x387d, 0x0000, 0x0000, 0x0000, 0x1852, 0xec57,
+    0x385e, 0x0000, 0x0000, 0x0000, 0x670c, 0xd674, 0x383e, 0x0000, 0x0000, 0x0000,
+    0xad40, 0xc2c4, 0x3820, 0x0000, 0x0000, 0x0000, 0x2e80, 0xa696, 0x3801, 0x0000,
+    0x0000, 0x0000, 0xd800, 0xc467, 0x37dc, 0x0000, 0x0000, 0x0000, 0x3c72, 0xc5ae,
+    0x37c3, 0x0000, 0x0000, 0x0000, 0xb006, 0xac69, 0x37a4, 0x0000, 0x0000, 0x0000,
+    0x34a0, 0x8cdf, 0x3782, 0x0000, 0x0000, 0x0000, 0x9ed2, 0xd25e, 0x3766, 0x0000,
+    0x0000, 0x0000, 0x6fec, 0xaaaa, 0x3747, 0x0000, 0x0000, 0x0000, 0x6040, 0xfb5c,
+    0x3726, 0x0000, 0x0000, 0x0000, 0x764c, 0xa3fc, 0x3708, 0x0000, 0x0000, 0x0000,
+    0xb254, 0x954e, 0x36e9, 0x0000, 0x0000, 0x0000, 0x3e1c, 0xf5dc, 0x36ca, 0x0000,
+    0x0000, 0x0000, 0x7b06, 0xc635, 0x36ac, 0x0000, 0x0000, 0x0000, 0xa8ba, 0xd738,
+    0x368d, 0x0000, 0x0000, 0x0000, 0x06cc, 0xb24e, 0x366d, 0x0000, 0x0000, 0x0000,
+    0x7108, 0xac76, 0x364f, 0x0000, 0x0000, 0x0000, 0x2324, 0xa7cb, 0x3630, 0x0000,
+    0x0000, 0x0000, 0xac40, 0xef15, 0x360f, 0x0000, 0x0000, 0x0000, 0xae46, 0xd516,
+    0x35f2, 0x0000, 0x0000, 0x0000, 0x615e, 0xe003, 0x35d3, 0x0000, 0x0000, 0x0000,
+    0x0cf0, 0xefe7, 0x35b1, 0x0000, 0x0000, 0x0000, 0xfb50, 0xf98c, 0x3595, 0x0000,
+    0x0000, 0x0000, 0x0abc, 0xf333, 0x3575, 0x0000, 0x0000, 0x0000, 0xdd60, 0xca3f,
+    0x3555, 0x0000, 0x0000, 0x0000, 0x7eb6, 0xd87f, 0x3538, 0x0000, 0x0000, 0x0000,
+    0x44f4, 0xb291, 0x3519, 0x0000, 0x0000, 0x0000, 0xff80, 0xc982, 0x34f6, 0x0000,
+    0x0000, 0x0000, 0x9de0, 0xd9b8, 0x34db, 0x0000, 0x0000, 0x0000, 0xcd42, 0x9366,
+    0x34bc, 0x0000, 0x0000, 0x0000, 0xbef0, 0xfaee, 0x349d, 0x0000, 0x0000, 0x0000,
+    0xdac4, 0xb6f1, 0x347d, 0x0000, 0x0000, 0x0000, 0xf140, 0x94de, 0x345d, 0x0000,
+    0x0000, 0x0000, 0xa218, 0x8b4b, 0x343e, 0x0000, 0x0000, 0x0000, 0x6380, 0xa135,
+    0x341e, 0x0000, 0x0000, 0x0000, 0xb184, 0x8cb2, 0x3402, 0x0000, 0x0000, 0x0000,
+    0x196e, 0xdc61, 0x33e3, 0x0000, 0x0000, 0x0000, 0x0c00, 0xde05, 0x33c4, 0x0000,
+    0x0000, 0x0000, 0xef9a, 0xbd38, 0x33a5, 0x0000, 0x0000, 0x0000, 0xc1a0, 0xdf00,
+    0x3385, 0x0000, 0x0000, 0x0000, 0x1090, 0x9973, 0x3365, 0x0000, 0x0000, 0x0000,
+    0x4882, 0x8301, 0x3348, 0x0000, 0x0000, 0x0000, 0x7abe, 0xadc7, 0x3329, 0x0000,
+    0x0000, 0x0000, 0x7cba, 0xec2b, 0x330a, 0x0000, 0x0000, 0x0000, 0xa520, 0x8f21,
+    0x32e9, 0x0000, 0x0000, 0x0000, 0x710c, 0x8d36, 0x32cc, 0x0000, 0x0000, 0x0000,
+    0x5212, 0xc6ed, 0x32ad, 0x0000, 0x0000, 0x0000, 0x7308, 0xfd76, 0x328d, 0x0000,
+    0x0000, 0x0000, 0x5014, 0xd548, 0x326f, 0x0000, 0x0000, 0x0000, 0xd3f2, 0xb499,
+    0x3250, 0x0000, 0x0000, 0x0000, 0x7f74, 0xa606, 0x3230, 0x0000, 0x0000, 0x0000,
+    0xf0a8, 0xd720, 0x3212, 0x0000, 0x0000, 0x0000, 0x185c, 0xe20f, 0x31f2, 0x0000,
+    0x0000, 0x0000, 0xa5a8, 0x8738, 0x31d4, 0x0000, 0x0000, 0x0000, 0xdd74, 0xcafb,
+    0x31b4, 0x0000, 0x0000, 0x0000, 0x98b6, 0xbd8e, 0x3196, 0x0000, 0x0000, 0x0000,
+    0xe9de, 0x977f, 0x3177, 0x0000, 0x0000, 0x0000, 0x67c0, 0x818d, 0x3158, 0x0000,
+    0x0000, 0x0000, 0xe52a, 0x9322, 0x3139, 0x0000, 0x0000, 0x0000, 0xe568, 0x9b6c,
+    0x3119, 0x0000, 0x0000, 0x0000, 0x2358, 0xaa0a, 0x30fa, 0x0000, 0x0000, 0x0000,
+    0xe480, 0xe13b, 0x30d9, 0x0000, 0x0000, 0x0000, 0x3024, 0x90a1, 0x30bd, 0x0000,
+    0x0000, 0x0000, 0x9620, 0xda30, 0x309d, 0x0000, 0x0000, 0x0000, 0x898a, 0xb388,
+    0x307f, 0x0000, 0x0000, 0x0000, 0xb24c, 0xc891, 0x3060, 0x0000, 0x0000, 0x0000,
+    0x8056, 0xf98b, 0x3041, 0x0000, 0x0000, 0x0000, 0x72a4, 0xa1ea, 0x3021, 0x0000,
+    0x0000, 0x0000, 0x6af8, 0x9488, 0x3001, 0x0000, 0x0000, 0x0000, 0xe00c, 0xdfcb,
+    0x2fe4, 0x0000, 0x0000, 0x0000, 0xeeec, 0xc941, 0x2fc4, 0x0000, 0x0000, 0x0000,
+    0x53e0, 0xe70f, 0x2fa4, 0x0000, 0x0000, 0x0000, 0x8f60, 0x9c07, 0x2f85, 0x0000,
+    0x0000, 0x0000, 0xb328, 0xc3e7, 0x2f68, 0x0000, 0x0000, 0x0000, 0x9404, 0xf8c7,
+    0x2f48, 0x0000, 0x0000, 0x0000, 0x38e0, 0xc99f, 0x2f29, 0x0000, 0x0000, 0x0000,
+    0x9778, 0xd984, 0x2f09, 0x0000, 0x0000, 0x0000, 0xe700, 0xd142, 0x2eea, 0x0000,
+    0x0000, 0x0000, 0xd904, 0x9443, 0x2ecd, 0x0000, 0x0000, 0x0000, 0xd4ba, 0xae7e,
+    0x2eae, 0x0000, 0x0000, 0x0000, 0x8e5e, 0x8524, 0x2e8f, 0x0000, 0x0000, 0x0000,
+    0xb550, 0xc9ed, 0x2e6e, 0x0000, 0x0000, 0x0000, 0x53b8, 0x8648, 0x2e51, 0x0000,
+    0x0000, 0x0000, 0xdae4, 0x87f9, 0x2e32, 0x0000, 0x0000, 0x0000, 0x2942, 0xd966,
+    0x2e13, 0x0000, 0x0000, 0x0000, 0x4f28, 0xcf3c, 0x2df3, 0x0000, 0x0000, 0x0000,
+    0xfa40, 0xc4ef, 0x2dd1, 0x0000, 0x0000, 0x0000, 0x4424, 0xbca7, 0x2db5, 0x0000,
+    0x0000, 0x0000, 0x2e62, 0xcdc5, 0x2d97, 0x0000, 0x0000, 0x0000, 0xed88, 0x996b,
+    0x2d78, 0x0000, 0x0000, 0x0000, 0x7c30, 0xd97d, 0x2d56, 0x0000, 0x0000, 0x0000,
+    0xed26, 0xbf6e, 0x2d3a, 0x0000, 0x0000, 0x0000, 0x2918, 0x921b, 0x2d1a, 0x0000,
+    0x0000, 0x0000, 0x4e24, 0xe84e, 0x2cfb, 0x0000, 0x0000, 0x0000, 0x6dc0, 0x92ec,
+    0x2cdd, 0x0000, 0x0000, 0x0000, 0x4f2c, 0xacf8, 0x2cbd, 0x0000, 0x0000, 0x0000,
+    0xc634, 0xf094, 0x2c9e, 0x0000, 0x0000, 0x0000, 0xdc70, 0xe5d3, 0x2c7e, 0x0000,
+    0x0000, 0x0000, 0x2180, 0xa600, 0x2c5b, 0x0000, 0x0000, 0x0000, 0x8480, 0xd680,
+    0x2c3c, 0x0000, 0x0000, 0x0000, 0x8b24, 0xd63b, 0x2c22, 0x0000, 0x0000, 0x0000,
+    0x02e0, 0xaa47, 0x2c00, 0x0000, 0x0000, 0x0000, 0x9ad0, 0xee84, 0x2be3, 0x0000,
+    0x0000, 0x0000, 0xf7dc, 0xf699, 0x2bc6, 0x0000, 0x0000, 0x0000, 0xddde, 0xe490,
+    0x2ba7, 0x0000, 0x0000, 0x0000, 0x34a0, 0xb4fd, 0x2b85, 0x0000, 0x0000, 0x0000,
+    0x91b4, 0x8ef6, 0x2b68, 0x0000, 0x0000, 0x0000, 0xa3e0, 0xa2a7, 0x2b47, 0x0000,
+    0x0000, 0x0000, 0xcce4, 0x82b3, 0x2b2a, 0x0000, 0x0000, 0x0000, 0xe4be, 0x8207,
+    0x2b0c, 0x0000, 0x0000, 0x0000, 0x1d92, 0xab43, 0x2aed, 0x0000, 0x0000, 0x0000,
+    0xe818, 0xf9f6, 0x2acd, 0x0000, 0x0000, 0x0000, 0xff12, 0xba80, 0x2aaf, 0x0000,
+    0x0000, 0x0000, 0x5254, 0x8529, 0x2a90, 0x0000, 0x0000, 0x0000, 0x1b88, 0xe032,
+    0x2a71, 0x0000, 0x0000, 0x0000, 0x3248, 0xd86d, 0x2a50, 0x0000, 0x0000, 0x0000,
+    0x3140, 0xc9d5, 0x2a2e, 0x0000, 0x0000, 0x0000, 0x14e6, 0xbd47, 0x2a14, 0x0000,
+    0x0000, 0x0000, 0x5c10, 0xe544, 0x29f4, 0x0000, 0x0000, 0x0000, 0x9f50, 0x90b6,
+    0x29d4, 0x0000, 0x0000, 0x0000, 0x9850, 0xab55, 0x29b6, 0x0000, 0x0000, 0x0000,
+    0x2750, 0x9d07, 0x2998, 0x0000, 0x0000, 0x0000, 0x6700, 0x8bbb, 0x2973, 0x0000,
+    0x0000, 0x0000, 0x5dba, 0xed31, 0x295a, 0x0000, 0x0000, 0x0000, 0x61dc, 0x85fe,
+    0x293a, 0x0000, 0x0000, 0x0000, 0x9ba2, 0xd6b4, 0x291c, 0x0000, 0x0000, 0x0000,
+    0x2d30, 0xe3a5, 0x28fb, 0x0000, 0x0000, 0x0000, 0x6630, 0xb566, 0x28dd, 0x0000,
+    0x0000, 0x0000, 0x5ad4, 0xa829, 0x28bf, 0x0000, 0x0000, 0x0000, 0x89d8, 0xe290,
+    0x28a0, 0x0000, 0x0000, 0x0000, 0x3916, 0xc428, 0x2881, 0x0000, 0x0000, 0x0000,
+    0x0490, 0xbea4, 0x2860, 0x0000, 0x0000, 0x0000, 0xee06, 0x80ee, 0x2843, 0x0000,
+    0x0000, 0x0000, 0xfc00, 0xf327, 0x2820, 0x0000, 0x0000, 0x0000, 0xea40, 0xa871,
+    0x2800, 0x0000, 0x0000, 0x0000, 0x63d8, 0x9c26, 0x27e4, 0x0000, 0x0000, 0x0000,
+    0x07ba, 0xc0c9, 0x27c7, 0x0000, 0x0000, 0x0000, 0x3fa2, 0x9797, 0x27a8, 0x0000,
+    0x0000, 0x0000, 0x21c6, 0xfeca, 0x2789, 0x0000, 0x0000, 0x0000, 0xde40, 0x860d,
+    0x2768, 0x0000, 0x0000, 0x0000, 0x9cc8, 0x98ce, 0x2749, 0x0000, 0x0000, 0x0000,
+    0x3778, 0xa31c, 0x272a, 0x0000, 0x0000, 0x0000, 0xe778, 0xf6e2, 0x270b, 0x0000,
+    0x0000, 0x0000, 0x59b8, 0xf841, 0x26ed, 0x0000, 0x0000, 0x0000, 0x02e0, 0xad04,
+    0x26cd, 0x0000, 0x0000, 0x0000, 0x5a92, 0x9380, 0x26b0, 0x0000, 0x0000, 0x0000,
+    0xc740, 0x8886, 0x268d, 0x0000, 0x0000, 0x0000, 0x0680, 0xfaf8, 0x266c, 0x0000,
+    0x0000, 0x0000, 0xfb60, 0x897f, 0x2653, 0x0000, 0x0000, 0x0000, 0x8760, 0xf903,
+    0x2634, 0x0000, 0x0000, 0x0000, 0xad2a, 0xc2c8, 0x2615, 0x0000, 0x0000, 0x0000,
+    0x2d86, 0x8aef, 0x25f6, 0x0000, 0x0000, 0x0000, 0x1ef4, 0xe627, 0x25d6, 0x0000,
+    0x0000, 0x0000, 0x09e4, 0x8020, 0x25b7, 0x0000, 0x0000, 0x0000, 0x7548, 0xd227,
+    0x2598, 0x0000, 0x0000, 0x0000, 0x75dc, 0xfb5b, 0x2579, 0x0000, 0x0000, 0x0000,
+    0xea84, 0xc8b6, 0x255a, 0x0000, 0x0000, 0x0000, 0xe4d0, 0x8145, 0x253b, 0x0000,
+    0x0000, 0x0000, 0x3640, 0x9768, 0x251c, 0x0000, 0x0000, 0x0000, 0x246a, 0xccec,
+    0x24fe, 0x0000, 0x0000, 0x0000, 0x51d0, 0xa075, 0x24dd, 0x0000, 0x0000, 0x0000,
+    0x4638, 0xa385, 0x24bf, 0x0000, 0x0000, 0x0000, 0xd788, 0xd776, 0x24a1, 0x0000,
+    0x0000, 0x0000, 0x1370, 0x8997, 0x2482, 0x0000, 0x0000, 0x0000, 0x1e88, 0x9b67,
+    0x2462, 0x0000, 0x0000, 0x0000, 0x6c08, 0xd975, 0x2444, 0x0000, 0x0000, 0x0000,
+    0xfdb0, 0xcfc0, 0x2422, 0x0000, 0x0000, 0x0000, 0x3100, 0xc026, 0x2406, 0x0000,
+    0x0000, 0x0000, 0xc5b4, 0xae64, 0x23e6, 0x0000, 0x0000, 0x0000, 0x2280, 0xf687,
+    0x23c3, 0x0000, 0x0000, 0x0000, 0x2de0, 0x9006, 0x23a9, 0x0000, 0x0000, 0x0000,
+    0x24bc, 0xf631, 0x238a, 0x0000, 0x0000, 0x0000, 0xb8d4, 0xa975, 0x236b, 0x0000,
+    0x0000, 0x0000, 0xd9a4, 0xb949, 0x234b, 0x0000, 0x0000, 0x0000, 0xb54e, 0xbd39,
+    0x232d, 0x0000, 0x0000, 0x0000, 0x4aac, 0x9a52, 0x230e, 0x0000, 0x0000, 0x0000,
+    0xbbbc, 0xd085, 0x22ef, 0x0000, 0x0000, 0x0000, 0xdf18, 0xc633, 0x22cf, 0x0000,
+    0x0000, 0x0000, 0x16d0, 0xeca5, 0x22af, 0x0000, 0x0000, 0x0000, 0xf2a0, 0xdf6f,
+    0x228e, 0x0000, 0x0000, 0x0000, 0x8c44, 0xe86b, 0x2272, 0x0000, 0x0000, 0x0000,
+    0x35c0, 0xbbf4, 0x2253, 0x0000, 0x0000, 0x0000, 0x0c40, 0xdafb, 0x2230, 0x0000,
+    0x0000, 0x0000, 0x92dc, 0x9935, 0x2216, 0x0000, 0x0000, 0x0000, 0x0ca0, 0xbda6,
+    0x21f3, 0x0000, 0x0000, 0x0000, 0x5958, 0xa6fd, 0x21d6, 0x0000, 0x0000, 0x0000,
+    0xa3dc, 0x9d7f, 0x21b9, 0x0000, 0x0000, 0x0000, 0x79dc, 0xfcb5, 0x2199, 0x0000,
+    0x0000, 0x0000, 0xf264, 0xcebb, 0x217b, 0x0000, 0x0000, 0x0000, 0x0abe, 0x8308,
+    0x215c, 0x0000, 0x0000, 0x0000, 0x30ae, 0xb463, 0x213d, 0x0000, 0x0000, 0x0000,
+    0x6228, 0xb040, 0x211c, 0x0000, 0x0000, 0x0000, 0xc9b2, 0xf43b, 0x20ff, 0x0000,
+    0x0000, 0x0000, 0x3d8e, 0xa4b3, 0x20e0, 0x0000, 0x0000, 0x0000, 0x84e6, 0x8dab,
+    0x20c1, 0x0000, 0x0000, 0x0000, 0xa124, 0x9b74, 0x20a1, 0x0000, 0x0000, 0x0000,
+    0xc276, 0xd497, 0x2083, 0x0000, 0x0000, 0x0000, 0x6354, 0xa466, 0x2063, 0x0000,
+    0x0000, 0x0000, 0x8654, 0xaf0a, 0x2044, 0x0000, 0x0000, 0x0000, 0x1d20, 0xfa5c,
+    0x2024, 0x0000, 0x0000, 0x0000, 0xbcd0, 0xf3f0, 0x2004, 0x0000, 0x0000, 0x0000,
+    0xedf0, 0xf0b6, 0x1fe7, 0x0000, 0x0000, 0x0000, 0x45bc, 0x9182, 0x1fc9, 0x0000,
+    0x0000, 0x0000, 0xe254, 0xdc85, 0x1faa, 0x0000, 0x0000, 0x0000, 0xb898, 0xe9b1,
+    0x1f8a, 0x0000, 0x0000, 0x0000, 0x0ebe, 0xe6f0, 0x1f6c, 0x0000, 0x0000, 0x0000,
+    0xa9b8, 0xf584, 0x1f4c, 0x0000, 0x0000, 0x0000, 0x12e8, 0xdf6b, 0x1f2e, 0x0000,
+    0x0000, 0x0000, 0x9f9e, 0xcd55, 0x1f0f, 0x0000, 0x0000, 0x0000, 0x05a0, 0xec3a,
+    0x1eef, 0x0000, 0x0000, 0x0000, 0xd8e0, 0x96f8, 0x1ed1, 0x0000, 0x0000, 0x0000,
+    0x3bd4, 0xccc6, 0x1eb1, 0x0000, 0x0000, 0x0000, 0x4910, 0xb87b, 0x1e93, 0x0000,
+    0x0000, 0x0000, 0xbefc, 0xd40b, 0x1e73, 0x0000, 0x0000, 0x0000, 0x317e, 0xa406,
+    0x1e55, 0x0000, 0x0000, 0x0000, 0x6bb2, 0xc2b2, 0x1e36, 0x0000, 0x0000, 0x0000,
+    0xb87e, 0xbb78, 0x1e17, 0x0000, 0x0000, 0x0000, 0xa03c, 0xdbbd, 0x1df7, 0x0000,
+    0x0000, 0x0000, 0x5b6c, 0xe3c8, 0x1dd9, 0x0000, 0x0000, 0x0000, 0x8968, 0xca8e,
+    0x1dba, 0x0000, 0x0000, 0x0000, 0xc024, 0xe6ab, 0x1d9a, 0x0000, 0x0000, 0x0000,
+    0x4110, 0xd4eb, 0x1d7a, 0x0000, 0x0000, 0x0000, 0xa168, 0xbdb5, 0x1d5d, 0x0000,
+    0x0000, 0x0000, 0x012e, 0xa5fa, 0x1d3e, 0x0000, 0x0000, 0x0000, 0x6838, 0x9c1f,
+    0x1d1e, 0x0000, 0x0000, 0x0000, 0xa158, 0xaa76, 0x1d00, 0x0000, 0x0000, 0x0000,
+    0x090a, 0xbd95, 0x1ce1, 0x0000, 0x0000, 0x0000, 0xf73e, 0x8b6d, 0x1cc2, 0x0000,
+    0x0000, 0x0000, 0x5fda, 0xbcbf, 0x1ca3, 0x0000, 0x0000, 0x0000, 0xdbe8, 0xb89f,
+    0x1c84, 0x0000, 0x0000, 0x0000, 0x6e4c, 0x96c7, 0x1c64, 0x0000, 0x0000, 0x0000,
+    0x19c2, 0xf2a4, 0x1c46, 0x0000, 0x0000, 0x0000, 0xb800, 0xf855, 0x1c1e, 0x0000,
+    0x0000, 0x0000, 0x87fc, 0x85ff, 0x1c08, 0x0000, 0x0000, 0x0000, 0x1418, 0x839f,
+    0x1be9, 0x0000, 0x0000, 0x0000, 0x6186, 0xd9d8, 0x1bca, 0x0000, 0x0000, 0x0000,
+    0xf500, 0xabaa, 0x1ba6, 0x0000, 0x0000, 0x0000, 0x7b36, 0xdafe, 0x1b8c, 0x0000,
+    0x0000, 0x0000, 0xf394, 0xe6d8, 0x1b6c, 0x0000, 0x0000, 0x0000, 0x6efc, 0x9e55,
+    0x1b4e, 0x0000, 0x0000, 0x0000, 0x5e10, 0xc523, 0x1b2e, 0x0000, 0x0000, 0x0000,
+    0x8210, 0xb6f9, 0x1b0d, 0x0000, 0x0000, 0x0000, 0x9ab0, 0x96e3, 0x1af1, 0x0000,
+    0x0000, 0x0000, 0x3864, 0x92e7, 0x1ad1, 0x0000, 0x0000, 0x0000, 0x9878, 0xdc65,
+    0x1ab1, 0x0000, 0x0000, 0x0000, 0xfa20, 0xd6cb, 0x1a94, 0x0000, 0x0000, 0x0000,
+    0x6c00, 0xa4e4, 0x1a70, 0x0000, 0x0000, 0x0000, 0xab40, 0xb41b, 0x1a53, 0x0000,
+    0x0000, 0x0000, 0x43a4, 0x8ede, 0x1a37, 0x0000, 0x0000, 0x0000, 0x22e0, 0x9314,
+    0x1a15, 0x0000, 0x0000, 0x0000, 0x6170, 0xb949, 0x19f8, 0x0000, 0x0000, 0x0000,
+    0x6b00, 0xe056, 0x19d8, 0x0000, 0x0000, 0x0000, 0x9ba8, 0xa94c, 0x19b9, 0x0000,
+    0x0000, 0x0000, 0xfaa0, 0xaa16, 0x199b, 0x0000, 0x0000, 0x0000, 0x899a, 0xf627,
+    0x197d, 0x0000, 0x0000, 0x0000, 0x9f20, 0xfb70, 0x195d, 0x0000, 0x0000, 0x0000,
+    0xa4b8, 0xc176, 0x193e, 0x0000, 0x0000, 0x0000, 0xb21c, 0x85c3, 0x1920, 0x0000,
+    0x0000, 0x0000, 0x50d2, 0x9b19, 0x1901, 0x0000, 0x0000, 0x0000, 0xd4b0, 0xb708,
+    0x18e0, 0x0000, 0x0000, 0x0000, 0xfb88, 0xf510, 0x18c1, 0x0000, 0x0000, 0x0000,
+    0x31ec, 0xdc8d, 0x18a3, 0x0000, 0x0000, 0x0000, 0x3c00, 0xbff9, 0x1885, 0x0000,
+    0x0000, 0x0000, 0x5020, 0xc30b, 0x1862, 0x0000, 0x0000, 0x0000, 0xd4f0, 0xda0c,
+    0x1844, 0x0000, 0x0000, 0x0000, 0x20d2, 0x99a5, 0x1828, 0x0000, 0x0000, 0x0000,
+    0x852e, 0xd159, 0x1809, 0x0000, 0x0000, 0x0000, 0x7cd8, 0x97a1, 0x17e9, 0x0000,
+    0x0000, 0x0000, 0x423a, 0x997b, 0x17cb, 0x0000, 0x0000, 0x0000, 0xc1c0, 0xbe7d,
+    0x17a8, 0x0000, 0x0000, 0x0000, 0xe8bc, 0xdcdd, 0x178d, 0x0000, 0x0000, 0x0000,
+    0x8b28, 0xae06, 0x176e, 0x0000, 0x0000, 0x0000, 0x102e, 0xb8d4, 0x174f, 0x0000,
+    0x0000, 0x0000, 0xaa00, 0xaa5c, 0x172f, 0x0000, 0x0000, 0x0000, 0x51f0, 0x9fc0,
+    0x170e, 0x0000, 0x0000, 0x0000, 0xf858, 0xe181, 0x16f2, 0x0000, 0x0000, 0x0000,
+    0x91a8, 0x8162, 0x16d3, 0x0000, 0x0000, 0x0000, 0x5f40, 0xcb6f, 0x16b1, 0x0000,
+    0x0000, 0x0000, 0xbb50, 0xe55f, 0x1693, 0x0000, 0x0000, 0x0000, 0xacd2, 0xd895,
+    0x1676, 0x0000, 0x0000, 0x0000, 0xef30, 0x97bf, 0x1654, 0x0000, 0x0000, 0x0000,
+    0xf700, 0xb3d7, 0x1633, 0x0000, 0x0000, 0x0000, 0x3454, 0xa7b5, 0x1619, 0x0000,
+    0x0000, 0x0000, 0x6b00, 0xa929, 0x15f6, 0x0000, 0x0000, 0x0000, 0x9f04, 0x89f7,
+    0x15db, 0x0000, 0x0000, 0x0000, 0xad78, 0xd985, 0x15bc, 0x0000, 0x0000, 0x0000,
+    0xa46a, 0xae3f, 0x159d, 0x0000, 0x0000, 0x0000, 0x63a0, 0xd0da, 0x157c, 0x0000,
+    0x0000, 0x0000, 0x5e90, 0x817d, 0x155e, 0x0000, 0x0000, 0x0000, 0x1494, 0xb13f,
+    0x1540, 0x0000, 0x0000, 0x0000, 0x0090, 0x9c40, 0x1521, 0x0000, 0x0000, 0x0000,
+    0xdd70, 0xcc86, 0x1500, 0x0000, 0x0000, 0x0000, 0x64f8, 0xdb6f, 0x14e1, 0x0000,
+    0x0000, 0x0000, 0xe22c, 0xac17, 0x14c3, 0x0000, 0x0000, 0x0000, 0x60e0, 0xa9ad,
+    0x14a3, 0x0000, 0x0000, 0x0000, 0x4640, 0xd658, 0x1481, 0x0000, 0x0000, 0x0000,
+    0x6490, 0xa181, 0x1467, 0x0000, 0x0000, 0x0000, 0x1df4, 0xaaa2, 0x1447, 0x0000,
+    0x0000, 0x0000, 0xb94a, 0x8f61, 0x1429, 0x0000, 0x0000, 0x0000, 0x5198, 0x9d83,
+    0x1409, 0x0000, 0x0000, 0x0000, 0x0f7a, 0xa818, 0x13eb, 0x0000, 0x0000, 0x0000,
+    0xc45e, 0xc06c, 0x13cc, 0x0000, 0x0000, 0x0000, 0x4ec0, 0xfa29, 0x13a8, 0x0000,
+    0x0000, 0x0000, 0x6418, 0x8cad, 0x138c, 0x0000, 0x0000, 0x0000, 0xbcc8, 0xe7d1,
+    0x136f, 0x0000, 0x0000, 0x0000, 0xc934, 0xf9b0, 0x134f, 0x0000, 0x0000, 0x0000,
+    0x6ce0, 0x98df, 0x1331, 0x0000, 0x0000, 0x0000, 0x3516, 0xe5e9, 0x1312, 0x0000,
+    0x0000, 0x0000, 0xc6c0, 0xef8b, 0x12ef, 0x0000, 0x0000, 0x0000, 0xaf02, 0x913d,
+    0x12d4, 0x0000, 0x0000, 0x0000, 0xd230, 0xe1d5, 0x12b5, 0x0000, 0x0000, 0x0000,
+    0xfba8, 0xc232, 0x1295, 0x0000, 0x0000, 0x0000, 0x7ba4, 0xabeb, 0x1277, 0x0000,
+    0x0000, 0x0000, 0x6e5c, 0xc692, 0x1258, 0x0000, 0x0000, 0x0000, 0x76a2, 0x9756,
+    0x1239, 0x0000, 0x0000, 0x0000, 0xe180, 0xe423, 0x1214, 0x0000, 0x0000, 0x0000,
+    0x8c3c, 0x90f8, 0x11fb, 0x0000, 0x0000, 0x0000, 0x9f3c, 0x9fd2, 0x11dc, 0x0000,
+    0x0000, 0x0000, 0x53e0, 0xb73e, 0x11bd, 0x0000, 0x0000, 0x0000, 0x45be, 0x88d6,
+    0x119e, 0x0000, 0x0000, 0x0000, 0x111a, 0x8bc0, 0x117f, 0x0000, 0x0000, 0x0000,
+    0xe26a, 0xd7ff, 0x1160, 0x0000, 0x0000, 0x0000, 0xfb60, 0xdd8d, 0x113f, 0x0000,
+    0x0000, 0x0000, 0x9370, 0xc108, 0x1120, 0x0000, 0x0000, 0x0000, 0x9654, 0x8baf,
+    0x1103, 0x0000, 0x0000, 0x0000, 0xd6ec, 0xd6b9, 0x10e4, 0x0000, 0x0000, 0x0000,
+    0x23e4, 0xd7b7, 0x10c4, 0x0000, 0x0000, 0x0000, 0x1aa6, 0xa847, 0x10a6, 0x0000,
+    0x0000, 0x0000, 0xbee6, 0x9fef, 0x1087, 0x0000, 0x0000, 0x0000, 0x26d0, 0xa6eb,
+    0x1066, 0x0000, 0x0000, 0x0000, 0x5b86, 0xa880, 0x1049, 0x0000, 0x0000, 0x0000,
+    0x125c, 0xd971, 0x1029, 0x0000, 0x0000, 0x0000, 0x1f78, 0x9d18, 0x100a, 0x0000,
+    0x0000, 0x0000, 0x0e84, 0xb15b, 0x0feb, 0x0000, 0x0000, 0x0000, 0xd0c0, 0xc150,
+    0x0fcc, 0x0000, 0x0000, 0x0000, 0xa330, 0xc40c, 0x0fad, 0x0000, 0x0000, 0x0000,
+    0x5202, 0xfc2c, 0x0f8f, 0x0000, 0x0000, 0x0000, 0x3f7c, 0xecf5, 0x0f6f, 0x0000,
+    0x0000, 0x0000, 0xef44, 0xfdfd, 0x0f50, 0x0000, 0x0000, 0x0000, 0x3f6c, 0xab1b,
+    0x0f31, 0x0000, 0x0000, 0x0000, 0xf658, 0x89ec, 0x0f11, 0x0000, 0x0000, 0x0000,
+    0xbfc8, 0x9ba8, 0x0ef4, 0x0000, 0x0000, 0x0000, 0x3d40, 0xbe21, 0x0ed5, 0x0000,
+    0x0000, 0x0000, 0xbbc4, 0xc70d, 0x0eb6, 0x0000, 0x0000, 0x0000, 0x5158, 0xdb16,
+    0x0e96, 0x0000, 0x0000, 0x0000, 0xb5a8, 0xa8d8, 0x0e78, 0x0000, 0x0000, 0x0000,
+    0xcccc, 0xb40e, 0x0e58, 0x0000, 0x0000, 0x0000, 0x448c, 0xcb62, 0x0e3a, 0x0000,
+    0x0000, 0x0000, 0xf12a, 0x8aed, 0x0e1b, 0x0000, 0x0000, 0x0000, 0x79d0, 0xc59c,
+    0x0dfb, 0x0000, 0x0000, 0x0000, 0x06b4, 0xcdc9, 0x0ddd, 0x0000, 0x0000, 0x0000,
+    0xae70, 0xa979, 0x0dbe, 0x0000, 0x0000, 0x0000, 0x317c, 0xa8fb, 0x0d9e, 0x0000,
+    0x0000, 0x0000, 0x5fe0, 0x8a50, 0x0d7d, 0x0000, 0x0000, 0x0000, 0x70b6, 0xfdfa,
+    0x0d61, 0x0000, 0x0000, 0x0000, 0x1640, 0x9dc7, 0x0d41, 0x0000, 0x0000, 0x0000,
+    0x9a9c, 0xdc50, 0x0d23, 0x0000, 0x0000, 0x0000, 0x4fcc, 0x9a9b, 0x0d04, 0x0000,
+    0x0000, 0x0000, 0x7e48, 0x8f77, 0x0ce5, 0x0000, 0x0000, 0x0000, 0x84e4, 0xd4b9,
+    0x0cc6, 0x0000, 0x0000, 0x0000, 0x84e0, 0xbd10, 0x0ca6, 0x0000, 0x0000, 0x0000,
+    0x1b0a, 0xc8d9, 0x0c88, 0x0000, 0x0000, 0x0000, 0x6a48, 0xfc81, 0x0c68, 0x0000,
+    0x0000, 0x0000, 0x070a, 0xbef6, 0x0c4a, 0x0000, 0x0000, 0x0000, 0x8a70, 0xf096,
+    0x0c2b, 0x0000, 0x0000, 0x0000, 0xecc2, 0xc994, 0x0c0c, 0x0000, 0x0000, 0x0000,
+    0x1540, 0x9537, 0x0bea, 0x0000, 0x0000, 0x0000, 0x1b02, 0xab5b, 0x0bce, 0x0000,
+    0x0000, 0x0000, 0x5dc0, 0xb0c8, 0x0bad, 0x0000, 0x0000, 0x0000, 0xc928, 0xe034,
+    0x0b8f, 0x0000, 0x0000, 0x0000, 0x2d12, 0xb4b0, 0x0b71, 0x0000, 0x0000, 0x0000,
+    0x8fc2, 0xbb94, 0x0b52, 0x0000, 0x0000, 0x0000, 0xe236, 0xe22f, 0x0b33, 0x0000,
+    0x0000, 0x0000, 0xb97c, 0xbe9e, 0x0b13, 0x0000, 0x0000, 0x0000, 0xe1a6, 0xe16d,
+    0x0af5, 0x0000, 0x0000, 0x0000, 0xd330, 0xbaf0, 0x0ad6, 0x0000, 0x0000, 0x0000,
+    0xc0bc, 0xbbd0, 0x0ab7, 0x0000, 0x0000, 0x0000, 0x8e66, 0xdd9b, 0x0a98, 0x0000,
+    0x0000, 0x0000, 0xc95c, 0xf799, 0x0a79, 0x0000, 0x0000, 0x0000, 0xdac0, 0xbe4c,
+    0x0a55, 0x0000, 0x0000, 0x0000, 0xafc0, 0xc378, 0x0a37, 0x0000, 0x0000, 0x0000,
+    0xa880, 0xe341, 0x0a19, 0x0000, 0x0000, 0x0000, 0xc242, 0x81f6, 0x09fd, 0x0000,
+    0x0000, 0x0000, 0x7470, 0xc777, 0x09de, 0x0000, 0x0000, 0x0000, 0x62bc, 0xb684,
+    0x09be, 0x0000, 0x0000, 0x0000, 0x43ac, 0x8c58, 0x099f, 0x0000, 0x0000, 0x0000,
+    0xcc3c, 0xf9ac, 0x0981, 0x0000, 0x0000, 0x0000, 0x1526, 0xb670, 0x0962, 0x0000,
+    0x0000, 0x0000, 0xc9fe, 0xdf50, 0x0943, 0x0000, 0x0000, 0x0000, 0x6ae6, 0xc065,
+    0x0924, 0x0000, 0x0000, 0x0000, 0xb114, 0xcf29, 0x0905, 0x0000, 0x0000, 0x0000,
+    0xd388, 0x922a, 0x08e4, 0x0000, 0x0000, 0x0000, 0xcf54, 0xb926, 0x08c7, 0x0000,
+    0x0000, 0x0000, 0x3826, 0xe855, 0x08a8, 0x0000, 0x0000, 0x0000, 0xe7c8, 0x829b,
+    0x0888, 0x0000, 0x0000, 0x0000, 0x546c, 0xa903, 0x086a, 0x0000, 0x0000, 0x0000,
+    0x8768, 0x99cc, 0x0849, 0x0000, 0x0000, 0x0000, 0x00ac, 0xf529, 0x082b, 0x0000,
+    0x0000, 0x0000, 0x2658, 0x9f0b, 0x080c, 0x0000, 0x0000, 0x0000, 0xfe5c, 0x9e21,
+    0x07ee, 0x0000, 0x0000, 0x0000, 0x6da2, 0x9910, 0x07cf, 0x0000, 0x0000, 0x0000,
+    0x9220, 0xf9b3, 0x07b0, 0x0000, 0x0000, 0x0000, 0x3d90, 0xa541, 0x0791, 0x0000,
+    0x0000, 0x0000, 0x6e4c, 0xe7cc, 0x0771, 0x0000, 0x0000, 0x0000, 0xa8fa, 0xe80a,
+    0x0753, 0x0000, 0x0000, 0x0000, 0x4e14, 0xc3a7, 0x0734, 0x0000, 0x0000, 0x0000,
+    0xf7e0, 0xbad9, 0x0712, 0x0000, 0x0000, 0x0000, 0xfea0, 0xeff2, 0x06f5, 0x0000,
+    0x0000, 0x0000, 0xcef6, 0xbd48, 0x06d7, 0x0000, 0x0000, 0x0000, 0x7544, 0xf559,
+    0x06b7, 0x0000, 0x0000, 0x0000, 0x2388, 0xf655, 0x0698, 0x0000, 0x0000, 0x0000,
+    0xe900, 0xad56, 0x0676, 0x0000, 0x0000, 0x0000, 0x2cc0, 0x8437, 0x0659, 0x0000,
+    0x0000, 0x0000, 0x3068, 0xc544, 0x063b, 0x0000, 0x0000, 0x0000, 0xdc70, 0xe73c,
+    0x061b, 0x0000, 0x0000, 0x0000, 0xee50, 0x9d49, 0x05fc, 0x0000, 0x0000, 0x0000,
+    0x93d2, 0x81f6, 0x05df, 0x0000, 0x0000, 0x0000, 0x941c, 0xadff, 0x05bf, 0x0000,
+    0x0000, 0x0000, 0x2ce2, 0x8e45, 0x05a1, 0x0000, 0x0000, 0x0000, 0x4a60, 0x95fd,
+    0x0581, 0x0000, 0x0000, 0x0000, 0x79f8, 0xb83a, 0x0563, 0x0000, 0x0000, 0x0000,
+    0xcb58, 0xa1f5, 0x0543, 0x0000, 0x0000, 0x0000, 0x2a3a, 0xdc36, 0x0525, 0x0000,
+    0x0000, 0x0000, 0x14ee, 0x890e, 0x0506, 0x0000, 0x0000, 0x0000, 0x8f20, 0xc432,
+    0x04e3, 0x0000, 0x0000, 0x0000, 0x8440, 0xb21d, 0x04c6, 0x0000, 0x0000, 0x0000,
+    0x5430, 0xf698, 0x04a7, 0x0000, 0x0000, 0x0000, 0x04ae, 0x8b20, 0x048a, 0x0000,
+    0x0000, 0x0000, 0x04d0, 0xe872, 0x046b, 0x0000, 0x0000, 0x0000, 0xc78e, 0x8893,
+    0x044c, 0x0000, 0x0000, 0x0000, 0x0f78, 0x9895, 0x042b, 0x0000, 0x0000, 0x0000,
+    0x11d4, 0xdf2e, 0x040d, 0x0000, 0x0000, 0x0000, 0xe84c, 0x89d5, 0x03ef, 0x0000,
+    0x0000, 0x0000, 0xf7be, 0x8a67, 0x03d0, 0x0000, 0x0000, 0x0000, 0x95d0, 0xc906,
+    0x03b1, 0x0000, 0x0000, 0x0000, 0x64ce, 0xd96c, 0x0392, 0x0000, 0x0000, 0x0000,
+    0x97ba, 0xa16f, 0x0373, 0x0000, 0x0000, 0x0000, 0x463c, 0xc51a, 0x0354, 0x0000,
+    0x0000, 0x0000, 0xef0a, 0xe93e, 0x0335, 0x0000, 0x0000, 0x0000, 0x526a, 0xa466,
+    0x0316, 0x0000, 0x0000, 0x0000, 0x4140, 0xa94d, 0x02f5, 0x0000, 0x0000, 0x0000,
+    0xb4ec, 0xce68, 0x02d8, 0x0000, 0x0000, 0x0000, 0x4fa2, 0x8490, 0x02b9, 0x0000,
+    0x0000, 0x0000, 0x4e60, 0xca98, 0x0298, 0x0000, 0x0000, 0x0000, 0x08dc, 0xe09c,
+    0x027a, 0x0000, 0x0000, 0x0000, 0x2b90, 0xc7e3, 0x025c, 0x0000, 0x0000, 0x0000,
+    0x5a7c, 0xf8ef, 0x023c, 0x0000, 0x0000, 0x0000, 0x5022, 0x9d58, 0x021e, 0x0000,
+    0x0000, 0x0000, 0x553a, 0xe242, 0x01ff, 0x0000, 0x0000, 0x0000, 0x7e6e, 0xb54d,
+    0x01e0, 0x0000, 0x0000, 0x0000, 0xd2d4, 0xa88c, 0x01c1, 0x0000, 0x0000, 0x0000,
+    0x75b6, 0xfe6d, 0x01a2, 0x0000, 0x0000, 0x0000, 0x3bb2, 0xf04c, 0x0183, 0x0000,
+    0x0000, 0x0000, 0xc2d0, 0xc046, 0x0163, 0x0000, 0x0000, 0x0000, 0x250c, 0xf9d6,
+    0x0145, 0x0000, 0x0000, 0x0000, 0xb7b4, 0x8a0d, 0x0126, 0x0000, 0x0000, 0x0000,
+    0x1a72, 0xe4f5, 0x0107, 0x0000, 0x0000, 0x0000, 0x825c, 0xa9b8, 0x00e8, 0x0000,
+    0x0000, 0x0000, 0x6c90, 0xc9ad, 0x00c6, 0x0000, 0x0000, 0x0000, 0x4d00, 0xd1bb,
+    0x00aa, 0x0000, 0x0000, 0x0000, 0xa4a0, 0xee01, 0x0087, 0x0000, 0x0000, 0x0000,
+    0x89a8, 0xbe9f, 0x006b, 0x0000, 0x0000, 0x0000, 0x038e, 0xc80c, 0x004d, 0x0000,
+    0x0000, 0x0000, 0xfe26, 0x8384, 0x002e, 0x0000, 0x0000, 0x0000, 0xcd90, 0xca57,
+    0x000e, 0x0000
+};
+
+void MacroAssembler::libm_reduce_pi04l(Register eax, Register ecx, Register edx, Register ebx, Register esi, Register edi, Register ebp, Register esp) {
+  Label B1_1, B1_2, B1_3, B1_4, B1_5, B1_6, B1_7, B1_8, B1_9, B1_10, B1_11, B1_12;
+  Label B1_13, B1_14, B1_15;
+
+  assert_different_registers(ebx, eax, ecx, edx, esi, edi, ebp, esp);
+
+  address zero_none = (address)_zero_none;
+  address _4onpi_d = (address)__4onpi_d;
+  address TWO_32H = (address)_TWO_32H;
+  address pi04_3d = (address)_pi04_3d;
+  address pi04_5d = (address)_pi04_5d;
+  address SCALE = (address)_SCALE;
+  address zeros = (address)_zeros;
+  address pi04_2d = (address)_pi04_2d;
+  address TWO_12H = (address)_TWO_12H;
+  address _4onpi_31l = (address)__4onpi_31l;
+
+  bind(B1_1);
+  push(ebp);
+  movl(ebp, esp);
+  andl(esp, -16);
+  push(esi);
+  push(edi);
+  push(ebx);
+  subl(esp, 20);
+  movzwl(ebx, Address(ebp, 16));
+  andl(ebx, 32767);
+  movl(eax, Address(ebp, 20));
+  cmpl(ebx, 16413);
+  movl(esi, Address(ebp, 24));
+  movl(Address(esp, 4), eax);
+  jcc(Assembler::greaterEqual, B1_8);
+
+  bind(B1_2);
+  fld_x(Address(ebp, 8));
+  fld_d(ExternalAddress(_4onpi_d));    //0x6dc9c883UL, 0x3ff45f30UL
+  fmul(1);
+  fstp_x(Address(esp, 8));
+  movzwl(ecx, Address(esp, 16));
+  negl(ecx);
+  addl(ecx, 30);
+  movl(eax, Address(esp, 12));
+  shrl(eax);
+  cmpl(Address(esp, 4), 0);
+  jcc(Assembler::notEqual, B1_4);
+
+  bind(B1_3);
+  lea(ecx, Address(eax, 1));
+  andl(ecx, -2);
+  jmp(B1_5);
+
+  bind(B1_4);
+  movl(ecx, eax);
+  addl(eax, Address(esp, 4));
+  movl(edx, eax);
+  andl(edx, 1);
+  addl(ecx, edx);
+
+  bind(B1_5);
+  fld_d(ExternalAddress(TWO_32H));    //0x00000000UL, 0x41f80000UL
+  cmpl(ebx, 16400);
+  movl(Address(esp, 0), ecx);
+  fild_s(Address(esp, 0));
+  jcc(Assembler::greaterEqual, B1_7);
+
+  bind(B1_6);
+  fld_d(ExternalAddress(pi04_3d));    //0x54442d00UL, 0x3fe921fbUL
+  fmul(1);
+  fsubp(3);
+  fxch(1);
+  fmul(2);
+  fld_s(2);
+  fadd(1);
+  fsubrp(1);
+  fld_s(0);
+  fxch(1);
+  fsuba(3);
+  fld_d(ExternalAddress(8 + pi04_3d));    //0x98cc5180UL, 0x3ce84698UL
+  fmul(3);
+  fsuba(2);
+  fxch(1);
+  fsub(2);
+  fsubrp(1);
+  faddp(3);
+  fld_d(ExternalAddress(16 + pi04_3d));    //0xcbb5bf6cUL, 0xb9dfc8f8UL
+  fmulp(2);
+  fld_s(1);
+  fsubr(1);
+  fsuba(1);
+  fxch(2);
+  fsubp(1);
+  faddp(2);
+  fxch(1);
+  jmp(B1_15);
+
+  bind(B1_7);
+  fld_d(ExternalAddress(pi04_5d));    //0x54400000UL, 0x3fe921fbUL
+  fmul(1);
+  fsubp(3);
+  fxch(1);
+  fmul(2);
+  fld_s(2);
+  fadd(1);
+  fsubrp(1);
+  fld_s(0);
+  fxch(1);
+  fsuba(3);
+  fld_d(ExternalAddress(8 + pi04_5d));    //0x1a600000UL, 0x3dc0b461UL
+  fmul(3);
+  fsuba(2);
+  fxch(1);
+  fsub(2);
+  fsubrp(1);
+  faddp(3);
+  fld_d(ExternalAddress(16 + pi04_5d));    //0x2e000000UL, 0x3b93198aUL
+  fmul(2);
+  fld_s(0);
+  fsubr(2);
+  fsuba(2);
+  fxch(1);
+  fsubp(2);
+  fxch(1);
+  faddp(3);
+  fld_d(ExternalAddress(24 + pi04_5d));    //0x25200000UL, 0x396b839aUL
+  fmul(2);
+  fld_s(0);
+  fsubr(2);
+  fsuba(2);
+  fxch(1);
+  fsubp(2);
+  fxch(1);
+  faddp(3);
+  fld_d(ExternalAddress(32 + pi04_5d));    //0x533e63a0UL, 0x37027044UL
+  fmulp(2);
+  fld_s(1);
+  fsubr(1);
+  fsuba(1);
+  fxch(2);
+  fsubp(1);
+  faddp(2);
+  fxch(1);
+  jmp(B1_15);
+
+  bind(B1_8);
+  fld_x(Address(ebp, 8));
+  addl(ebx, -16417);
+  fmul_d(as_Address(ExternalAddress(SCALE)));    //0x00000000UL, 0x32600000UL
+  movl(eax, -2078209981);
+  imull(ebx);
+  addl(edx, ebx);
+  movl(ecx, ebx);
+  sarl(edx, 4);
+  sarl(ecx, 31);
+  subl(edx, ecx);
+  movl(eax, edx);
+  shll(eax, 5);
+  fstp_x(Address(ebp, 8));
+  fld_x(Address(ebp, 8));
+  subl(eax, edx);
+  movl(Address(ebp, 8), 0);
+  subl(ebx, eax);
+  fld_x(Address(ebp, 8));
+  cmpl(ebx, 17);
+  fsuba(1);
+  jcc(Assembler::less, B1_10);
+
+  bind(B1_9);
+  lea(eax, Address(noreg, edx, Address::times_8));
+  lea(ecx, Address(eax, edx, Address::times_4));
+  incl(edx);
+  fld_x(Address(_4onpi_31l, RelocationHolder::none).plus_disp(ecx, Address::times_1));
+  fmul(2);
+  fld_x(Address(12 + _4onpi_31l, RelocationHolder::none).plus_disp(ecx, Address::times_1));
+  fmul(2);
+  fld_s(0);
+  fadd(2);
+  fsuba(2);
+  fxch(1);
+  faddp(2);
+  fld_s(1);
+  fadd(1);
+  fstp_x(Address(esp, 8));
+  andl(Address(esp, 8), -16777216);
+  fld_x(Address(esp, 8));
+  fsubp(1);
+  jmp(B1_11);
+
+  bind(B1_10);
+  fld_d(ExternalAddress(zeros));    //0x00000000UL, 0x00000000UL
+  fld_s(0);
+
+  bind(B1_11);
+  fld_s(0);
+  lea(eax, Address(noreg, edx, Address::times_8));
+  fld_s(3);
+  lea(edx, Address(eax, edx, Address::times_4));
+  fld_x(Address(_4onpi_31l, RelocationHolder::none).plus_disp(edx, Address::times_1));
+  fmul(6);
+  movl(Address(esp, 0), edx);
+  fadda(2);
+  fxch(2);
+  fsuba(3);
+  fxch(2);
+  faddp(3);
+  fxch(2);
+  faddp(3);
+  fld_x(Address(12 + _4onpi_31l, RelocationHolder::none).plus_disp(edx, Address::times_1));
+  fmula(2);
+  fld_s(2);
+  fadd(2);
+  fld_s(0);
+  fxch(1);
+  fsubra(3);
+  fxch(3);
+  fchs();
+  faddp(4);
+  fxch(3);
+  faddp(4);
+  fxch(2);
+  fadd(3);
+  fxch(2);
+  fmul(5);
+  fadda(2);
+  fld_s(4);
+  fld_x(Address(24 + _4onpi_31l, RelocationHolder::none).plus_disp(edx, Address::times_1));
+  fmula(1);
+  fxch(1);
+  fadda(4);
+  fxch(4);
+  fstp_x(Address(esp, 8));
+  movzwl(ebx, Address(esp, 16));
+  andl(ebx, 32767);
+  cmpl(ebx, 16415);
+  jcc(Assembler::greaterEqual, B1_13);
+
+  bind(B1_12);
+  negl(ebx);
+  addl(ebx, 30);
+  movl(ecx, ebx);
+  movl(eax, Address(esp, 12));
+  shrl(eax);
+  shll(eax);
+  movl(Address(esp, 12), eax);
+  movl(Address(esp, 8), 0);
+  shrl(eax);
+  jmp(B1_14);
+
+  bind(B1_13);
+  negl(ebx);
+  addl(ebx, 30);
+  movl(ecx, ebx);
+  movl(edx, Address(esp, 8));
+  shrl(edx);
+  shll(edx);
+  negl(ecx);
+  movl(eax, Address(esp, 12));
+  shll(eax);
+  movl(ecx, ebx);
+  movl(Address(esp, 8), edx);
+  shrl(edx);
+  orl(eax, edx);
+
+  bind(B1_14);
+  fld_x(Address(esp, 8));
+  addl(eax, Address(esp, 4));
+  fsubp(3);
+  fmul(6);
+  fld_s(4);
+  movl(edx, eax);
+  andl(edx, 1);
+  fadd(3);
+  movl(ecx, Address(esp, 0));
+  fsuba(3);
+  fxch(3);
+  faddp(5);
+  fld_s(1);
+  fxch(3);
+  fadd_d(Address(zero_none, RelocationHolder::none).plus_disp(edx, Address::times_8));
+  fadda(3);
+  fsub(3);
+  faddp(2);
+  fxch(1);
+  faddp(4);
+  fld_s(2);
+  fadd(2);
+  fsuba(2);
+  fxch(3);
+  faddp(2);
+  fxch(1);
+  faddp(3);
+  fld_s(0);
+  fadd(2);
+  fsuba(2);
+  fxch(1);
+  faddp(2);
+  fxch(1);
+  faddp(2);
+  fld_s(2);
+  fld_x(Address(36 + _4onpi_31l, RelocationHolder::none).plus_disp(ecx, Address::times_1));
+  fmula(1);
+  fld_s(1);
+  fadd(3);
+  fsuba(3);
+  fxch(2);
+  faddp(3);
+  fxch(2);
+  faddp(3);
+  fxch(1);
+  fmul(4);
+  fld_s(0);
+  fadd(2);
+  fsuba(2);
+  fxch(1);
+  faddp(2);
+  fxch(1);
+  faddp(2);
+  fld_s(2);
+  fld_x(Address(48 + _4onpi_31l, RelocationHolder::none).plus_disp(ecx, Address::times_1));
+  fmula(1);
+  fld_s(1);
+  fadd(3);
+  fsuba(3);
+  fxch(2);
+  faddp(3);
+  fxch(2);
+  faddp(3);
+  fld_s(3);
+  fxch(2);
+  fmul(5);
+  fld_x(Address(60 + _4onpi_31l, RelocationHolder::none).plus_disp(ecx, Address::times_1));
+  fmula(3);
+  fxch(3);
+  faddp(1);
+  fld_s(0);
+  fadd(2);
+  fsuba(2);
+  fxch(1);
+  faddp(2);
+  fxch(1);
+  faddp(3);
+  fld_s(3);
+  fxch(2);
+  fmul(5);
+  fld_x(Address(72 + _4onpi_31l, RelocationHolder::none).plus_disp(ecx, Address::times_1));
+  fmula(3);
+  fxch(3);
+  faddp(1);
+  fld_s(0);
+  fadd(2);
+  fsuba(2);
+  fxch(1);
+  faddp(2);
+  fxch(1);
+  faddp(3);
+  fxch(1);
+  fmulp(4);
+  fld_x(Address(84 + _4onpi_31l, RelocationHolder::none).plus_disp(ecx, Address::times_1));
+  fmulp(3);
+  fxch(2);
+  faddp(3);
+  fld_s(2);
+  fadd(2);
+  fld_d(ExternalAddress(TWO_32H));    //0x00000000UL, 0x41f80000UL
+  fmul(1);
+  fadda(1);
+  fsubp(1);
+  fsuba(2);
+  fxch(3);
+  faddp(2);
+  faddp(1);
+  fld_d(ExternalAddress(pi04_2d));    //0x54400000UL, 0x3fe921fbUL
+  fld_s(0);
+  fmul(2);
+  fxch(2);
+  fadd(3);
+  fxch(1);
+  fmulp(3);
+  fmul_d(as_Address(ExternalAddress(8 + pi04_2d)));    //0x1a626331UL, 0x3dc0b461UL
+  faddp(1);
+
+  bind(B1_15);
+  fld_d(ExternalAddress(TWO_12H));    //0x00000000UL, 0x40b80000UL
+  fld_s(2);
+  fadd(2);
+  fmula(1);
+  fstp_x(Address(esp, 8));
+  fld_x(Address(esp, 8));
+  fadd(1);
+  fsubrp(1);
+  fst_d(Address(esi, 0));
+  fsubp(2);
+  faddp(1);
+  fstp_d(Address(esi, 8));
+  addl(esp, 20);
+  pop(ebx);
+  pop(edi);
+  pop(esi);
+  movl(esp, ebp);
+  pop(ebp);
+  ret(0);
+}
+
+ALIGNED_(16) juint _L_2il0floatpacket_0[] =
+{
+    0xffffffffUL, 0x7fffffffUL, 0x00000000UL, 0x00000000UL
+};
+
+ALIGNED_(16) juint _Pi4Inv[] =
+{
+    0x6dc9c883UL, 0x3ff45f30UL
+};
+
+ALIGNED_(16) juint _Pi4x3[] =
+{
+    0x54443000UL, 0xbfe921fbUL, 0x3b39a000UL, 0x3d373dcbUL, 0xe0e68948UL,
+    0xba845c06UL
+};
+
+ALIGNED_(16) juint _Pi4x4[] =
+{
+    0x54400000UL, 0xbfe921fbUL, 0x1a600000UL, 0xbdc0b461UL, 0x2e000000UL,
+    0xbb93198aUL, 0x252049c1UL, 0xb96b839aUL
+};
+
+ALIGNED_(16) jushort _SP[] =
+{
+    0xaaab, 0xaaaa, 0xaaaa, 0xaaaa, 0xbffc, 0x0000, 0x8887, 0x8888, 0x8888, 0x8888,
+    0x3ff8, 0x0000, 0xc527, 0x0d00, 0x00d0, 0xd00d, 0xbff2, 0x0000, 0x45f6, 0xb616,
+    0x1d2a, 0xb8ef, 0x3fec, 0x0000, 0x825b, 0x3997, 0x2b3f, 0xd732, 0xbfe5, 0x0000,
+    0xbf33, 0x8bb4, 0x2fda, 0xb092, 0x3fde, 0x0000, 0x44a6, 0xed1a, 0x29ef, 0xd73e,
+    0xbfd6, 0x0000, 0x8610, 0x307f, 0x62a1, 0xc921, 0x3fce, 0x0000
+};
+
+ALIGNED_(16) jushort _CP[] =
+{
+    0x0000, 0x0000, 0x0000, 0x8000, 0xbffe, 0x0000, 0xaaa5, 0xaaaa, 0xaaaa, 0xaaaa,
+    0x3ffa, 0x0000, 0x9c2f, 0x0b60, 0x60b6, 0xb60b, 0xbff5, 0x0000, 0xf024, 0x0cac,
+    0x00d0, 0xd00d, 0x3fef, 0x0000, 0x03fe, 0x3f65, 0x7dbb, 0x93f2, 0xbfe9, 0x0000,
+    0xd84d, 0xadee, 0xc698, 0x8f76, 0x3fe2, 0x0000, 0xdaba, 0xfe79, 0xea36, 0xc9c9,
+    0xbfda, 0x0000, 0x3ac6, 0x0ba0, 0x07ce, 0xd585, 0x3fd2, 0x0000
+};
+
+ALIGNED_(16) juint _ones[] =
+{
+    0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xbff00000UL
+};
+
+void MacroAssembler::libm_sincos_huge(XMMRegister xmm0, XMMRegister xmm1, Register eax, Register ecx, Register edx, Register ebx, Register esi, Register edi, Register ebp, Register esp) {
+  Label B1_1, B1_2, B1_3, B1_4, B1_5, B1_6, B1_7, B1_8, B1_9, B1_10, B1_11, B1_12;
+  Label B1_13, B1_14, B1_15, B1_16, B1_17, B1_18, B1_19, B1_20, B1_21, B1_22, B1_23;
+  Label B1_24, B1_25, B1_26, B1_27, B1_28, B1_29, B1_30, B1_31, B1_32, B1_33, B1_34;
+  Label B1_35, B1_36, B1_37, B1_38, B1_39, B1_40, B1_41, B1_42, B1_43, B1_44, B1_45, B1_46;
+
+  assert_different_registers(ebx, eax, ecx, edx, esi, edi, ebp, esp);
+
+  address L_2il0floatpacket_0 = (address)_L_2il0floatpacket_0;
+  address Pi4Inv = (address)_Pi4Inv;
+  address Pi4x3 = (address)_Pi4x3;
+  address Pi4x4 = (address)_Pi4x4;
+  address ones = (address)_ones;
+  address CP = (address)_CP;
+  address SP = (address)_SP;
+
+  bind(B1_1);
+  push(ebp);
+  movl(ebp, esp);
+  andl(esp, -64);
+  push(esi);
+  push(edi);
+  push(ebx);
+  subl(esp, 52);
+  movl(eax, Address(ebp, 16));
+  movl(edx, Address(ebp, 20));
+  movl(Address(esp, 32), eax);
+  movl(Address(esp, 36), edx);
+
+  bind(B1_2);
+  fnstcw(Address(esp, 30));
+
+  bind(B1_3);
+  movsd(xmm1, Address(ebp, 8));
+  movl(esi, Address(ebp, 12));
+  movl(eax, esi);
+  andl(eax, 2147483647);
+  andps(xmm1, ExternalAddress(L_2il0floatpacket_0));    //0xffffffffUL, 0x7fffffffUL, 0x00000000UL, 0x00000000UL
+  shrl(esi, 31);
+  movl(Address(esp, 40), eax);
+  cmpl(eax, 1104150528);
+  movsd(Address(ebp, 8), xmm1);
+  jcc(Assembler::aboveEqual, B1_11);
+
+  bind(B1_4);
+  movsd(xmm0, ExternalAddress(Pi4Inv));    //0x6dc9c883UL, 0x3ff45f30UL
+  mulsd(xmm0, xmm1);
+  movzwl(edx, Address(esp, 30));
+  movl(eax, edx);
+  andl(eax, 768);
+  movsd(Address(esp, 0), xmm0);
+  cmpl(eax, 768);
+  jcc(Assembler::equal, B1_42);
+
+  bind(B1_5);
+  orl(edx, -64768);
+  movw(Address(esp, 28), edx);
+
+  bind(B1_6);
+  fldcw(Address(esp, 28));
+
+  bind(B1_7);
+  movsd(xmm1, Address(ebp, 8));
+  movl(ebx, 1);
+
+  bind(B1_8);
+  movl(Address(esp, 12), ebx);
+  movl(ebx, Address(esp, 4));
+  movl(eax, ebx);
+  movl(Address(esp, 8), esi);
+  movl(esi, ebx);
+  shrl(esi, 20);
+  andl(eax, 1048575);
+  movl(ecx, esi);
+  orl(eax, 1048576);
+  negl(ecx);
+  movl(edx, eax);
+  addl(ecx, 19);
+  addl(esi, 13);
+  movl(Address(esp, 24), ecx);
+  shrl(edx);
+  movl(ecx, esi);
+  shll(eax);
+  movl(ecx, Address(esp, 24));
+  movl(esi, Address(esp, 0));
+  shrl(esi);
+  orl(eax, esi);
+  cmpl(ebx, 1094713344);
+  movsd(Address(esp, 16), xmm1);
+  fld_d(Address(esp, 16));
+  cmov32(Assembler::below, eax, edx);
+  movl(esi, Address(esp, 8));
+  lea(edx, Address(eax, 1));
+  movl(ebx, edx);
+  andl(ebx, -2);
+  movl(Address(esp, 16), ebx);
+  fild_s(Address(esp, 16));
+  movl(ebx, Address(esp, 12));
+  cmpl(Address(esp, 40), 1094713344);
+  jcc(Assembler::aboveEqual, B1_10);
+
+  bind(B1_9);
+  fld_d(ExternalAddress(Pi4x3));    //0x54443000UL, 0xbfe921fbUL
+  fmul(1);
+  faddp(2);
+  fld_d(ExternalAddress(8 + Pi4x3));    //0x3b39a000UL, 0x3d373dcbUL
+  fmul(1);
+  faddp(2);
+  fld_d(ExternalAddress(16 + Pi4x3));    //0xe0e68948UL, 0xba845c06UL
+  fmulp(1);
+  faddp(1);
+  jmp(B1_17);
+
+  bind(B1_10);
+  fld_d(ExternalAddress(Pi4x4));    //0x54400000UL, 0xbfe921fbUL
+  fmul(1);
+  faddp(2);
+  fld_d(ExternalAddress(8 + Pi4x4));    //0x1a600000UL, 0xbdc0b461UL
+  fmul(1);
+  faddp(2);
+  fld_d(ExternalAddress(16 + Pi4x4));    //0x2e000000UL, 0xbb93198aUL
+  fmul(1);
+  faddp(2);
+  fld_d(ExternalAddress(24 + Pi4x4));    //0x252049c1UL, 0xb96b839aUL
+  fmulp(1);
+  faddp(1);
+  jmp(B1_17);
+
+  bind(B1_11);
+  movzwl(edx, Address(esp, 30));
+  movl(eax, edx);
+  andl(eax, 768);
+  cmpl(eax, 768);
+  jcc(Assembler::equal, B1_43);
+  bind(B1_12);
+  orl(edx, -64768);
+  movw(Address(esp, 28), edx);
+
+  bind(B1_13);
+  fldcw(Address(esp, 28));
+
+  bind(B1_14);
+  movsd(xmm1, Address(ebp, 8));
+  movl(ebx, 1);
+
+  bind(B1_15);
+  movsd(Address(esp, 16), xmm1);
+  fld_d(Address(esp, 16));
+  addl(esp, -32);
+  lea(eax, Address(esp, 32));
+  fstp_x(Address(esp, 0));
+  movl(Address(esp, 12), 0);
+  movl(Address(esp, 16), eax);
+  call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dlibm_reduce_pi04l())));
+
+  bind(B1_46);
+  addl(esp, 32);
+
+  bind(B1_16);
+  fld_d(Address(esp, 0));
+  lea(edx, Address(eax, 1));
+  fld_d(Address(esp, 8));
+  faddp(1);
+
+  bind(B1_17);
+  movl(ecx, edx);
+  addl(eax, 3);
+  shrl(ecx, 2);
+  andl(ecx, 1);
+  shrl(eax, 2);
+  xorl(esi, ecx);
+  movl(ecx, Address(esp, 36));
+  andl(eax, 1);
+  andl(ecx, 3);
+  cmpl(ecx, 3);
+  jcc(Assembler::notEqual, B1_25);
+
+  bind(B1_18);
+  fld_x(ExternalAddress(84 + SP));    //0x8610, 0x307f, 0x62
+  fld_s(1);
+  fmul((2));
+  testb(edx, 2);
+  fmula((1));
+  fld_x(ExternalAddress(72 + SP));    //0x44a6, 0xed1a, 0x29
+  faddp(2);
+  fmula(1);
+  fld_x(ExternalAddress(60 + SP));    //0xbf33, 0x8bb4, 0x2f
+  faddp(2);
+  fmula(1);
+  fld_x(ExternalAddress(48 + SP));    //0x825b, 0x3997, 0x2b
+  faddp(2);
+  fmula(1);
+  fld_x(ExternalAddress(36 + SP));    //0x45f6, 0xb616, 0x1d
+  faddp(2);
+  fmula(1);
+  fld_x(ExternalAddress(24 + SP));    //0xc527, 0x0d00, 0x00
+  faddp(2);
+  fmula(1);
+  fld_x(ExternalAddress(12 + SP));    //0x8887, 0x8888, 0x88
+  faddp(2);
+  fmula(1);
+  fld_x(ExternalAddress(SP));    //0xaaab, 0xaaaa, 0xaa
+  faddp(2);
+  fmula(1);
+  fld_x(ExternalAddress(84 + CP));    //0x3ac6, 0x0ba0, 0x07
+  fmul(1);
+  fld_x(ExternalAddress(72 + CP));    //0xdaba, 0xfe79, 0xea
+  faddp(1);
+  fmul(1);
+  fld_x(ExternalAddress(62 + CP));    //0xd84d, 0xadee, 0xc6
+  faddp(1);
+  fmul(1);
+  fld_x(ExternalAddress(48 + CP));    //0x03fe, 0x3f65, 0x7d
+  faddp(1);
+  fmul(1);
+  fld_x(ExternalAddress(36 + CP));    //0xf024, 0x0cac, 0x00
+  faddp(1);
+  fmul(1);
+  fld_x(ExternalAddress(24 + CP));    //0x9c2f, 0x0b60, 0x60
+  faddp(1);
+  fmul(1);
+  fld_x(ExternalAddress(12 + CP));    //0xaaa5, 0xaaaa, 0xaa
+  faddp(1);
+  fmul(1);
+  fld_x(ExternalAddress(CP));    //0x0000, 0x0000, 0x00
+  faddp(1);
+  fmulp(1);
+  fld_d(Address(ones, RelocationHolder::none).plus_disp(esi, Address::times_8));
+  fld_d(Address(ones, RelocationHolder::none).plus_disp(eax, Address::times_8));
+  jcc(Assembler::equal, B1_22);
+
+  bind(B1_19);
+  fmulp(4);
+  testl(ebx, ebx);
+  fxch(2);
+  fmul(3);
+  movl(eax, Address(esp, 2));
+  faddp(3);
+  fxch(2);
+  fstp_d(Address(eax, 0));
+  fmula(1);
+  faddp(1);
+  fstp_d(Address(eax, 8));
+  jcc(Assembler::equal, B1_21);
+
+  bind(B1_20);
+  fldcw(Address(esp, 30));
+
+  bind(B1_21);
+  addl(esp, 52);
+  pop(ebx);
+  pop(edi);
+  pop(esi);
+  movl(esp, ebp);
+  pop(ebp);
+  ret(0);
+
+  bind(B1_22);
+  fxch(1);
+  fmulp(4);
+  testl(ebx, ebx);
+  fxch(2);
+  fmul(3);
+  movl(eax, Address(esp, 32));
+  faddp(3);
+  fxch(2);
+  fstp_d(Address(eax, 8));
+  fmula(1);
+  faddp(1);
+  fstp_d(Address(eax, 0));
+  jcc(Assembler::equal, B1_24);
+
+  bind(B1_23);
+  fldcw(Address(esp, 30));
+
+  bind(B1_24);
+  addl(esp, 52);
+  pop(ebx);
+  pop(edi);
+  pop(esi);
+  movl(esp, ebp);
+  pop(ebp);
+  ret(0);
+
+  bind(B1_25);
+  testb(Address(esp, 36), 2);
+  jcc(Assembler::equal, B1_33);
+
+  bind(B1_26);
+  fld_s(0);
+  testb(edx, 2);
+  fmul(1);
+  fld_s(0);
+  fmul(1);
+  jcc(Assembler::equal, B1_30);
+
+  bind(B1_27);
+  fstp_d(2);
+  fld_x(ExternalAddress(84 + CP));    //0x3ac6, 0x0ba0, 0x07
+  testl(ebx, ebx);
+  fmul(2);
+  fld_x(ExternalAddress(72 + CP));    //0xdaba, 0xfe79, 0xea
+  fmul(3);
+  fld_x(ExternalAddress(60 + CP));    //0xd84d, 0xadee, 0xc6
+  movl(eax, Address(rsp, 32));
+  faddp(2);
+  fxch(1);
+  fmul(3);
+  fld_x(ExternalAddress(48 + CP));    //0x03fe, 0x3f65, 0x7d
+  faddp(2);
+  fxch(1);
+  fmul(3);
+  fld_x(ExternalAddress(36 + CP));    //0xf024, 0x0cac, 0x00
+  faddp(2);
+  fxch(1);
+  fmul(3);
+  fld_x(ExternalAddress(24 + CP));    //0x9c2f, 0x0b60, 0x60
+  faddp(2);
+  fxch(1);
+  fmul(3);
+  fld_x(ExternalAddress(12 + CP));    //0xaaa5, 0xaaaa, 0xaa
+  faddp(2);
+  fxch(1);
+  fmulp(3);
+  fld_x(ExternalAddress(CP));    //0x0000, 0x0000, 0x00
+  faddp(1);
+  fmulp(1);
+  faddp(1);
+  fld_d(Address(ones, RelocationHolder::none).plus_disp(rsi, Address::times_8));
+  fmula(1);
+  faddp(1);
+  fstp_d(Address(eax, 8));
+  jcc(Assembler::equal, B1_29);
+
+  bind(B1_28);
+  fldcw(Address(esp, 30));
+
+  bind(B1_29);
+  addl(esp, 52);
+  pop(ebx);
+  pop(edi);
+  pop(esi);
+  movl(esp, ebp);
+  pop(ebp);
+  ret(0);
+
+  bind(B1_30);
+  fld_x(ExternalAddress(84 + SP));    //0x8610, 0x307f, 0x62
+  testl(ebx, ebx);
+  fmul(1);
+  fld_x(ExternalAddress(72 + SP));    //0x44a6, 0xed1a, 0x29
+  fmul(2);
+  fld_x(ExternalAddress(60 + SP));    //0xbf33, 0x8bb4, 0x2f
+  movl(eax, Address(rsp, 32));
+  faddp(2);
+  fxch(1);
+  fmul(2);
+  fld_x(ExternalAddress(48 + SP));    //0x825b, 0x3997, 0x2b
+  faddp(2);
+  fxch(1);
+  fmul(2);
+  fld_x(ExternalAddress(36 + SP));    //0x45f6, 0xb616, 0x1d
+  faddp(2);
+  fxch(1);
+  fmul(2);
+  fld_x(ExternalAddress(24 + SP));    //0xc527, 0x0d00, 0x00
+  faddp(2);
+  fxch(1);
+  fmul(2);
+  fld_x(ExternalAddress(12 + SP));    //0x8887, 0x8888, 0x88
+  faddp(2);
+  fxch(1);
+  fmulp(2);
+  fld_x(ExternalAddress(SP));    //0xaaab, 0xaaaa, 0xaa
+  faddp(1);
+  fmulp(2);
+  faddp(1);
+  fld_d(Address(ones, RelocationHolder::none).plus_disp(rsi, Address::times_8));
+  fmulp(2);
+  fmul(1);
+  faddp(1);
+  fstp_d(Address(eax, 8));
+  jcc(Assembler::equal, B1_32);
+
+  bind(B1_31);
+  fldcw(Address(esp, 30));
+
+  bind(B1_32);
+  addl(esp, 52);
+  pop(ebx);
+  pop(edi);
+  pop(esi);
+  movl(esp, ebp);
+  pop(ebp);
+  ret(0);
+
+  bind(B1_33);
+  testb(Address(esp, 36), 1);
+  jcc(Assembler::equal, B1_41);
+
+  bind(B1_34);
+  fld_s(0);
+  testb(edx, 2);
+  fmul(1);
+  fld_s(0);
+  fmul(1);
+  jcc(Assembler::equal, B1_38);
+
+  bind(B1_35);
+  fld_x(ExternalAddress(84 + SP));    //0x8610, 0x307f, 0x62
+  testl(ebx, ebx);
+  fmul(1);
+  fld_x(ExternalAddress(72 + SP));    //0x44a6, 0xed1a, 0x29
+  fmul(2);
+  fld_x(ExternalAddress(60 + SP));    //0xbf33, 0x8bb4, 0x2f
+  faddp(2);
+  fxch(1);
+  fmul(2);
+  fld_x(ExternalAddress(48 + SP));    //0x825b, 0x3997, 0x2b
+  faddp(2);
+  fxch(1);
+  fmul(2);
+  fld_x(ExternalAddress(36 + SP));    //0x45f6, 0xb616, 0x1d
+  faddp(2);
+  fxch(1);
+  fmul(2);
+  fld_x(ExternalAddress(24 + SP));    //0xc527, 0x0d00, 0x00
+  faddp(2);
+  fxch(1);
+  fmul(2);
+  fld_x(ExternalAddress(12 + SP));    //0x8887, 0x8888, 0x88
+  faddp(2);
+  fxch(1);
+  fmulp(2);
+  fld_x(ExternalAddress(SP));    //0xaaab, 0xaaaa, 0xaa
+  faddp(1);
+  fmulp(2);
+  faddp(1);
+  fld_d(Address(ones, RelocationHolder::none).plus_disp(eax, Address::times_8));
+  fmulp(2);
+  fmul(1);
+  movl(eax, Address(esp, 32));
+  faddp(1);
+  fstp_d(Address(eax, 0));
+  jcc(Assembler::equal, B1_37);
+
+  bind(B1_36);
+  fldcw(Address(esp, 30));
+
+  bind(B1_37);
+  addl(esp, 52);
+  pop(ebx);
+  pop(edi);
+  pop(esi);
+  movl(esp, ebp);
+  pop(ebp);
+  ret(0);
+
+  bind(B1_38);
+  fstp_d(2);
+  fld_x(ExternalAddress(84 + CP));    //0x3ac6, 0x0ba0, 0x07
+  testl(ebx, ebx);
+  fmul(2);
+  fld_x(ExternalAddress(72 + CP));    //0xdaba, 0xfe79, 0xea
+  fmul(3);
+  fld_x(ExternalAddress(60 + CP));    //0xd84d, 0xadee, 0xc6
+  faddp(2);
+  fxch(1);
+  fmul(3);
+  fld_x(ExternalAddress(48 + CP));    //0x03fe, 0x3f65, 0x7d
+  faddp(2);
+  fxch(1);
+  fmul(3);
+  fld_x(ExternalAddress(36 + CP));    //0xf024, 0x0cac, 0x00
+  faddp(2);
+  fxch(1);
+  fmul(3);
+  fld_x(ExternalAddress(24 + CP));    //0x9c2f, 0x0b60, 0x60
+  faddp(2);
+  fxch(1);
+  fmul(3);
+  fld_x(ExternalAddress(12 + CP));    //0xaaa5, 0xaaaa, 0xaa
+  faddp(2);
+  fxch(1);
+  fmulp(3);
+  fld_x(ExternalAddress(CP));    //0x0000, 0x0000, 0x00
+  faddp(1);
+  fmulp(1);
+  faddp(1);
+  fld_d(Address(ones, RelocationHolder::none).plus_disp(eax, Address::times_8));
+  fmula(1);
+  movl(eax, Address(esp, 32));
+  faddp(1);
+  fstp_d(Address(eax, 0));
+  jcc(Assembler::equal, B1_40);
+
+  bind(B1_39);
+  fldcw(Address(esp, 30));
+  bind(B1_40);
+  addl(esp, 52);
+  pop(ebx);
+  pop(edi);
+  pop(esi);
+  movl(esp, ebp);
+  pop(ebp);
+  ret(0);
+  bind(B1_41);
+  fstp_d(0);
+  addl(esp, 52);
+  pop(ebx);
+  pop(edi);
+  pop(esi);
+  movl(esp, ebp);
+  pop(ebp);
+  ret(0);
+  bind(B1_42);
+  xorl(ebx, ebx);
+  jmp(B1_8);
+  bind(B1_43);
+  xorl(ebx, ebx);
+  jmp(B1_15);
+}
+
+ALIGNED_(16) juint _static_const_table_sin[] =
+{
+    0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
+    0x00000000UL, 0x00000000UL, 0x3ff00000UL, 0x176d6d31UL, 0xbf73b92eUL,
+    0xbc29b42cUL, 0x3fb917a6UL, 0xe0000000UL, 0xbc3e2718UL, 0x00000000UL,
+    0x3ff00000UL, 0x011469fbUL, 0xbf93ad06UL, 0x3c69a60bUL, 0x3fc8f8b8UL,
+    0xc0000000UL, 0xbc626d19UL, 0x00000000UL, 0x3ff00000UL, 0x939d225aUL,
+    0xbfa60beaUL, 0x2ed59f06UL, 0x3fd29406UL, 0xa0000000UL, 0xbc75d28dUL,
+    0x00000000UL, 0x3ff00000UL, 0x866b95cfUL, 0xbfb37ca1UL, 0xa6aea963UL,
+    0x3fd87de2UL, 0xe0000000UL, 0xbc672cedUL, 0x00000000UL, 0x3ff00000UL,
+    0x73fa1279UL, 0xbfbe3a68UL, 0x3806f63bUL, 0x3fde2b5dUL, 0x20000000UL,
+    0x3c5e0d89UL, 0x00000000UL, 0x3ff00000UL, 0x5bc57974UL, 0xbfc59267UL,
+    0x39ae68c8UL, 0x3fe1c73bUL, 0x20000000UL, 0x3c8b25ddUL, 0x00000000UL,
+    0x3ff00000UL, 0x53aba2fdUL, 0xbfcd0dfeUL, 0x25091dd6UL, 0x3fe44cf3UL,
+    0x20000000UL, 0x3c68076aUL, 0x00000000UL, 0x3ff00000UL, 0x99fcef32UL,
+    0x3fca8279UL, 0x667f3bcdUL, 0x3fe6a09eUL, 0x20000000UL, 0xbc8bdd34UL,
+    0x00000000UL, 0x3fe00000UL, 0x94247758UL, 0x3fc133ccUL, 0x6b151741UL,
+    0x3fe8bc80UL, 0x20000000UL, 0xbc82c5e1UL, 0x00000000UL, 0x3fe00000UL,
+    0x9ae68c87UL, 0x3fac73b3UL, 0x290ea1a3UL, 0x3fea9b66UL, 0xe0000000UL,
+    0x3c39f630UL, 0x00000000UL, 0x3fe00000UL, 0x7f909c4eUL, 0xbf9d4a2cUL,
+    0xf180bdb1UL, 0x3fec38b2UL, 0x80000000UL, 0xbc76e0b1UL, 0x00000000UL,
+    0x3fe00000UL, 0x65455a75UL, 0xbfbe0875UL, 0xcf328d46UL, 0x3fed906bUL,
+    0x20000000UL, 0x3c7457e6UL, 0x00000000UL, 0x3fe00000UL, 0x76acf82dUL,
+    0x3fa4a031UL, 0x56c62ddaUL, 0x3fee9f41UL, 0xe0000000UL, 0x3c8760b1UL,
+    0x00000000UL, 0x3fd00000UL, 0x0e5967d5UL, 0xbfac1d1fUL, 0xcff75cb0UL,
+    0x3fef6297UL, 0x20000000UL, 0x3c756217UL, 0x00000000UL, 0x3fd00000UL,
+    0x0f592f50UL, 0xbf9ba165UL, 0xa3d12526UL, 0x3fefd88dUL, 0x40000000UL,
+    0xbc887df6UL, 0x00000000UL, 0x3fc00000UL, 0x00000000UL, 0x00000000UL,
+    0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
+    0x00000000UL, 0x0f592f50UL, 0x3f9ba165UL, 0xa3d12526UL, 0x3fefd88dUL,
+    0x40000000UL, 0xbc887df6UL, 0x00000000UL, 0xbfc00000UL, 0x0e5967d5UL,
+    0x3fac1d1fUL, 0xcff75cb0UL, 0x3fef6297UL, 0x20000000UL, 0x3c756217UL,
+    0x00000000UL, 0xbfd00000UL, 0x76acf82dUL, 0xbfa4a031UL, 0x56c62ddaUL,
+    0x3fee9f41UL, 0xe0000000UL, 0x3c8760b1UL, 0x00000000UL, 0xbfd00000UL,
+    0x65455a75UL, 0x3fbe0875UL, 0xcf328d46UL, 0x3fed906bUL, 0x20000000UL,
+    0x3c7457e6UL, 0x00000000UL, 0xbfe00000UL, 0x7f909c4eUL, 0x3f9d4a2cUL,
+    0xf180bdb1UL, 0x3fec38b2UL, 0x80000000UL, 0xbc76e0b1UL, 0x00000000UL,
+    0xbfe00000UL, 0x9ae68c87UL, 0xbfac73b3UL, 0x290ea1a3UL, 0x3fea9b66UL,
+    0xe0000000UL, 0x3c39f630UL, 0x00000000UL, 0xbfe00000UL, 0x94247758UL,
+    0xbfc133ccUL, 0x6b151741UL, 0x3fe8bc80UL, 0x20000000UL, 0xbc82c5e1UL,
+    0x00000000UL, 0xbfe00000UL, 0x99fcef32UL, 0xbfca8279UL, 0x667f3bcdUL,
+    0x3fe6a09eUL, 0x20000000UL, 0xbc8bdd34UL, 0x00000000UL, 0xbfe00000UL,
+    0x53aba2fdUL, 0x3fcd0dfeUL, 0x25091dd6UL, 0x3fe44cf3UL, 0x20000000UL,
+    0x3c68076aUL, 0x00000000UL, 0xbff00000UL, 0x5bc57974UL, 0x3fc59267UL,
+    0x39ae68c8UL, 0x3fe1c73bUL, 0x20000000UL, 0x3c8b25ddUL, 0x00000000UL,
+    0xbff00000UL, 0x73fa1279UL, 0x3fbe3a68UL, 0x3806f63bUL, 0x3fde2b5dUL,
+    0x20000000UL, 0x3c5e0d89UL, 0x00000000UL, 0xbff00000UL, 0x866b95cfUL,
+    0x3fb37ca1UL, 0xa6aea963UL, 0x3fd87de2UL, 0xe0000000UL, 0xbc672cedUL,
+    0x00000000UL, 0xbff00000UL, 0x939d225aUL, 0x3fa60beaUL, 0x2ed59f06UL,
+    0x3fd29406UL, 0xa0000000UL, 0xbc75d28dUL, 0x00000000UL, 0xbff00000UL,
+    0x011469fbUL, 0x3f93ad06UL, 0x3c69a60bUL, 0x3fc8f8b8UL, 0xc0000000UL,
+    0xbc626d19UL, 0x00000000UL, 0xbff00000UL, 0x176d6d31UL, 0x3f73b92eUL,
+    0xbc29b42cUL, 0x3fb917a6UL, 0xe0000000UL, 0xbc3e2718UL, 0x00000000UL,
+    0xbff00000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
+    0x00000000UL, 0x00000000UL, 0x00000000UL, 0xbff00000UL, 0x176d6d31UL,
+    0x3f73b92eUL, 0xbc29b42cUL, 0xbfb917a6UL, 0xe0000000UL, 0x3c3e2718UL,
+    0x00000000UL, 0xbff00000UL, 0x011469fbUL, 0x3f93ad06UL, 0x3c69a60bUL,
+    0xbfc8f8b8UL, 0xc0000000UL, 0x3c626d19UL, 0x00000000UL, 0xbff00000UL,
+    0x939d225aUL, 0x3fa60beaUL, 0x2ed59f06UL, 0xbfd29406UL, 0xa0000000UL,
+    0x3c75d28dUL, 0x00000000UL, 0xbff00000UL, 0x866b95cfUL, 0x3fb37ca1UL,
+    0xa6aea963UL, 0xbfd87de2UL, 0xe0000000UL, 0x3c672cedUL, 0x00000000UL,
+    0xbff00000UL, 0x73fa1279UL, 0x3fbe3a68UL, 0x3806f63bUL, 0xbfde2b5dUL,
+    0x20000000UL, 0xbc5e0d89UL, 0x00000000UL, 0xbff00000UL, 0x5bc57974UL,
+    0x3fc59267UL, 0x39ae68c8UL, 0xbfe1c73bUL, 0x20000000UL, 0xbc8b25ddUL,
+    0x00000000UL, 0xbff00000UL, 0x53aba2fdUL, 0x3fcd0dfeUL, 0x25091dd6UL,
+    0xbfe44cf3UL, 0x20000000UL, 0xbc68076aUL, 0x00000000UL, 0xbff00000UL,
+    0x99fcef32UL, 0xbfca8279UL, 0x667f3bcdUL, 0xbfe6a09eUL, 0x20000000UL,
+    0x3c8bdd34UL, 0x00000000UL, 0xbfe00000UL, 0x94247758UL, 0xbfc133ccUL,
+    0x6b151741UL, 0xbfe8bc80UL, 0x20000000UL, 0x3c82c5e1UL, 0x00000000UL,
+    0xbfe00000UL, 0x9ae68c87UL, 0xbfac73b3UL, 0x290ea1a3UL, 0xbfea9b66UL,
+    0xe0000000UL, 0xbc39f630UL, 0x00000000UL, 0xbfe00000UL, 0x7f909c4eUL,
+    0x3f9d4a2cUL, 0xf180bdb1UL, 0xbfec38b2UL, 0x80000000UL, 0x3c76e0b1UL,
+    0x00000000UL, 0xbfe00000UL, 0x65455a75UL, 0x3fbe0875UL, 0xcf328d46UL,
+    0xbfed906bUL, 0x20000000UL, 0xbc7457e6UL, 0x00000000UL, 0xbfe00000UL,
+    0x76acf82dUL, 0xbfa4a031UL, 0x56c62ddaUL, 0xbfee9f41UL, 0xe0000000UL,
+    0xbc8760b1UL, 0x00000000UL, 0xbfd00000UL, 0x0e5967d5UL, 0x3fac1d1fUL,
+    0xcff75cb0UL, 0xbfef6297UL, 0x20000000UL, 0xbc756217UL, 0x00000000UL,
+    0xbfd00000UL, 0x0f592f50UL, 0x3f9ba165UL, 0xa3d12526UL, 0xbfefd88dUL,
+    0x40000000UL, 0x3c887df6UL, 0x00000000UL, 0xbfc00000UL, 0x00000000UL,
+    0x00000000UL, 0x00000000UL, 0xbff00000UL, 0x00000000UL, 0x00000000UL,
+    0x00000000UL, 0x00000000UL, 0x0f592f50UL, 0xbf9ba165UL, 0xa3d12526UL,
+    0xbfefd88dUL, 0x40000000UL, 0x3c887df6UL, 0x00000000UL, 0x3fc00000UL,
+    0x0e5967d5UL, 0xbfac1d1fUL, 0xcff75cb0UL, 0xbfef6297UL, 0x20000000UL,
+    0xbc756217UL, 0x00000000UL, 0x3fd00000UL, 0x76acf82dUL, 0x3fa4a031UL,
+    0x56c62ddaUL, 0xbfee9f41UL, 0xe0000000UL, 0xbc8760b1UL, 0x00000000UL,
+    0x3fd00000UL, 0x65455a75UL, 0xbfbe0875UL, 0xcf328d46UL, 0xbfed906bUL,
+    0x20000000UL, 0xbc7457e6UL, 0x00000000UL, 0x3fe00000UL, 0x7f909c4eUL,
+    0xbf9d4a2cUL, 0xf180bdb1UL, 0xbfec38b2UL, 0x80000000UL, 0x3c76e0b1UL,
+    0x00000000UL, 0x3fe00000UL, 0x9ae68c87UL, 0x3fac73b3UL, 0x290ea1a3UL,
+    0xbfea9b66UL, 0xe0000000UL, 0xbc39f630UL, 0x00000000UL, 0x3fe00000UL,
+    0x94247758UL, 0x3fc133ccUL, 0x6b151741UL, 0xbfe8bc80UL, 0x20000000UL,
+    0x3c82c5e1UL, 0x00000000UL, 0x3fe00000UL, 0x99fcef32UL, 0x3fca8279UL,
+    0x667f3bcdUL, 0xbfe6a09eUL, 0x20000000UL, 0x3c8bdd34UL, 0x00000000UL,
+    0x3fe00000UL, 0x53aba2fdUL, 0xbfcd0dfeUL, 0x25091dd6UL, 0xbfe44cf3UL,
+    0x20000000UL, 0xbc68076aUL, 0x00000000UL, 0x3ff00000UL, 0x5bc57974UL,
+    0xbfc59267UL, 0x39ae68c8UL, 0xbfe1c73bUL, 0x20000000UL, 0xbc8b25ddUL,
+    0x00000000UL, 0x3ff00000UL, 0x73fa1279UL, 0xbfbe3a68UL, 0x3806f63bUL,
+    0xbfde2b5dUL, 0x20000000UL, 0xbc5e0d89UL, 0x00000000UL, 0x3ff00000UL,
+    0x866b95cfUL, 0xbfb37ca1UL, 0xa6aea963UL, 0xbfd87de2UL, 0xe0000000UL,
+    0x3c672cedUL, 0x00000000UL, 0x3ff00000UL, 0x939d225aUL, 0xbfa60beaUL,
+    0x2ed59f06UL, 0xbfd29406UL, 0xa0000000UL, 0x3c75d28dUL, 0x00000000UL,
+    0x3ff00000UL, 0x011469fbUL, 0xbf93ad06UL, 0x3c69a60bUL, 0xbfc8f8b8UL,
+    0xc0000000UL, 0x3c626d19UL, 0x00000000UL, 0x3ff00000UL, 0x176d6d31UL,
+    0xbf73b92eUL, 0xbc29b42cUL, 0xbfb917a6UL, 0xe0000000UL, 0x3c3e2718UL,
+    0x00000000UL, 0x3ff00000UL, 0x55555555UL, 0xbfc55555UL, 0x00000000UL,
+    0xbfe00000UL, 0x11111111UL, 0x3f811111UL, 0x55555555UL, 0x3fa55555UL,
+    0x1a01a01aUL, 0xbf2a01a0UL, 0x16c16c17UL, 0xbf56c16cUL, 0xa556c734UL,
+    0x3ec71de3UL, 0x1a01a01aUL, 0x3efa01a0UL, 0x1a600000UL, 0x3d90b461UL,
+    0x1a600000UL, 0x3d90b461UL, 0x54400000UL, 0x3fb921fbUL, 0x00000000UL,
+    0x00000000UL, 0x2e037073UL, 0x3b63198aUL, 0x00000000UL, 0x00000000UL,
+    0x6dc9c883UL, 0x40245f30UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
+    0x43380000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x43600000UL,
+    0x00000000UL, 0x00000000UL, 0x00000000UL, 0x3c800000UL, 0x00000000UL,
+    0x00000000UL, 0xffffffffUL, 0x3fefffffUL, 0x00000000UL, 0x00000000UL,
+    0x00000000UL, 0x80000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
+    0x80000000UL, 0x00000000UL, 0x80000000UL, 0x00000000UL, 0x3fe00000UL,
+    0x00000000UL, 0x3fe00000UL
+};
+
+void MacroAssembler::fast_sin(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ebx, Register edx) {
+
+  Label L_2TAG_PACKET_0_0_2, L_2TAG_PACKET_1_0_2, L_2TAG_PACKET_2_0_2, L_2TAG_PACKET_3_0_2;
+  Label L_2TAG_PACKET_4_0_2, start;
+  assert_different_registers(eax, ebx, edx);
+  address static_const_table_sin = (address)_static_const_table_sin;
+
+  bind(start);
+  subl(rsp, 120);
+  movl(Address(rsp, 56), ebx);
+  lea(ebx, ExternalAddress(static_const_table_sin));
+  movsd(xmm0, Address(rsp, 128));
+  pextrw(eax, xmm0, 3);
+  andl(eax, 32767);
+  subl(eax, 12336);
+  cmpl(eax, 4293);
+  jcc(Assembler::above, L_2TAG_PACKET_0_0_2);
+  movsd(xmm1, Address(ebx, 2160));
+  mulsd(xmm1, xmm0);
+  movsd(xmm5, Address(ebx, 2272));
+  movdqu(xmm4, Address(ebx, 2256));
+  pand(xmm4, xmm0);
+  por(xmm5, xmm4);
+  movsd(xmm3, Address(ebx, 2128));
+  movdqu(xmm2, Address(ebx, 2112));
+  addpd(xmm1, xmm5);
+  cvttsd2sil(edx, xmm1);
+  cvtsi2sdl(xmm1, edx);
+  mulsd(xmm3, xmm1);
+  unpcklpd(xmm1, xmm1);
+  addl(edx, 1865216);
+  movdqu(xmm4, xmm0);
+  andl(edx, 63);
+  movdqu(xmm5, Address(ebx, 2096));
+  lea(eax, Address(ebx, 0));
+  shll(edx, 5);
+  addl(eax, edx);
+  mulpd(xmm2, xmm1);
+  subsd(xmm0, xmm3);
+  mulsd(xmm1, Address(ebx, 2144));
+  subsd(xmm4, xmm3);
+  movsd(xmm7, Address(eax, 8));
+  unpcklpd(xmm0, xmm0);
+  movapd(xmm3, xmm4);
+  subsd(xmm4, xmm2);
+  mulpd(xmm5, xmm0);
+  subpd(xmm0, xmm2);
+  movdqu(xmm6, Address(ebx, 2064));
+  mulsd(xmm7, xmm4);
+  subsd(xmm3, xmm4);
+  mulpd(xmm5, xmm0);
+  mulpd(xmm0, xmm0);
+  subsd(xmm3, xmm2);
+  movdqu(xmm2, Address(eax, 0));
+  subsd(xmm1, xmm3);
+  movsd(xmm3, Address(eax, 24));
+  addsd(xmm2, xmm3);
+  subsd(xmm7, xmm2);
+  mulsd(xmm2, xmm4);
+  mulpd(xmm6, xmm0);
+  mulsd(xmm3, xmm4);
+  mulpd(xmm2, xmm0);
+  mulpd(xmm0, xmm0);
+  addpd(xmm5, Address(ebx, 2080));
+  mulsd(xmm4, Address(eax, 0));
+  addpd(xmm6, Address(ebx, 2048));
+  mulpd(xmm5, xmm0);
+  movapd(xmm0, xmm3);
+  addsd(xmm3, Address(eax, 8));
+  mulpd(xmm1, xmm7);
+  movapd(xmm7, xmm4);
+  addsd(xmm4, xmm3);
+  addpd(xmm6, xmm5);
+  movsd(xmm5, Address(eax, 8));
+  subsd(xmm5, xmm3);
+  subsd(xmm3, xmm4);
+  addsd(xmm1, Address(eax, 16));
+  mulpd(xmm6, xmm2);
+  addsd(xmm5, xmm0);
+  addsd(xmm3, xmm7);
+  addsd(xmm1, xmm5);
+  addsd(xmm1, xmm3);
+  addsd(xmm1, xmm6);
+  unpckhpd(xmm6, xmm6);
+  addsd(xmm1, xmm6);
+  addsd(xmm4, xmm1);
+  movsd(Address(rsp, 0), xmm4);
+  fld_d(Address(rsp, 0));
+  jmp(L_2TAG_PACKET_1_0_2);
+
+  bind(L_2TAG_PACKET_0_0_2);
+  jcc(Assembler::greater, L_2TAG_PACKET_2_0_2);
+  shrl(eax, 4);
+  cmpl(eax, 268434685);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_3_0_2);
+  movsd(Address(rsp, 0), xmm0);
+  fld_d(Address(rsp, 0));
+  jmp(L_2TAG_PACKET_1_0_2);
+
+  bind(L_2TAG_PACKET_3_0_2);
+  movsd(xmm3, Address(ebx, 2192));
+  mulsd(xmm3, xmm0);
+  subsd(xmm3, xmm0);
+  mulsd(xmm3, Address(ebx, 2208));
+  movsd(Address(rsp, 0), xmm0);
+  fld_d(Address(rsp, 0));
+  jmp(L_2TAG_PACKET_1_0_2);
+
+  bind(L_2TAG_PACKET_2_0_2);
+  movl(eax, Address(rsp, 132));
+  andl(eax, 2146435072);
+  cmpl(eax, 2146435072);
+  jcc(Assembler::equal, L_2TAG_PACKET_4_0_2);
+  subl(rsp, 32);
+  movsd(Address(rsp, 0), xmm0);
+  lea(eax, Address(rsp, 40));
+  movl(Address(rsp, 8), eax);
+  movl(eax, 2);
+  movl(Address(rsp, 12), eax);
+  call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dlibm_sin_cos_huge())));
+  addl(rsp, 32);
+  fld_d(Address(rsp, 16));
+  jmp(L_2TAG_PACKET_1_0_2);
+  bind(L_2TAG_PACKET_4_0_2);
+  fld_d(Address(rsp, 128));
+  fmul_d(Address(ebx, 2240));
+  bind(L_2TAG_PACKET_1_0_2);
+  movl(ebx, Address(rsp, 56));
+}
+
+/******************************************************************************/
+//                     ALGORITHM DESCRIPTION - COS()
+//                     ---------------------
+//
+//     1. RANGE REDUCTION
+//
+//     We perform an initial range reduction from X to r with
+//
+//          X =~= N * pi/32 + r
+//
+//     so that |r| <= pi/64 + epsilon. We restrict inputs to those
+//     where |N| <= 932560. Beyond this, the range reduction is
+//     insufficiently accurate. For extremely small inputs,
+//     denormalization can occur internally, impacting performance.
+//     This means that the main path is actually only taken for
+//     2^-252 <= |X| < 90112.
+//
+//     To avoid branches, we perform the range reduction to full
+//     accuracy each time.
+//
+//          X - N * (P_1 + P_2 + P_3)
+//
+//     where P_1 and P_2 are 32-bit numbers (so multiplication by N
+//     is exact) and P_3 is a 53-bit number. Together, these
+//     approximate pi well enough for all cases in the restricted
+//     range.
+//
+//     The main reduction sequence is:
+//
+//             y = 32/pi * x
+//             N = integer(y)
+//     (computed by adding and subtracting off SHIFTER)
+//
+//             m_1 = N * P_1
+//             m_2 = N * P_2
+//             r_1 = x - m_1
+//             r = r_1 - m_2
+//     (this r can be used for most of the calculation)
+//
+//             c_1 = r_1 - r
+//             m_3 = N * P_3
+//             c_2 = c_1 - m_2
+//             c = c_2 - m_3
+//
+//     2. MAIN ALGORITHM
+//
+//     The algorithm uses a table lookup based on B = M * pi / 32
+//     where M = N mod 64. The stored values are:
+//       sigma             closest power of 2 to cos(B)
+//       C_hl              53-bit cos(B) - sigma
+//       S_hi + S_lo       2 * 53-bit sin(B)
+//
+//     The computation is organized as follows:
+//
+//          sin(B + r + c) = [sin(B) + sigma * r] +
+//                           r * (cos(B) - sigma) +
+//                           sin(B) * [cos(r + c) - 1] +
+//                           cos(B) * [sin(r + c) - r]
+//
+//     which is approximately:
+//
+//          [S_hi + sigma * r] +
+//          C_hl * r +
+//          S_lo + S_hi * [(cos(r) - 1) - r * c] +
+//          (C_hl + sigma) * [(sin(r) - r) + c]
+//
+//     and this is what is actually computed. We separate this sum
+//     into four parts:
+//
+//          hi + med + pols + corr
+//
+//     where
+//
+//          hi       = S_hi + sigma r
+//          med      = C_hl * r
+//          pols     = S_hi * (cos(r) - 1) + (C_hl + sigma) * (sin(r) - r)
+//          corr     = S_lo + c * ((C_hl + sigma) - S_hi * r)
+//
+//     3. POLYNOMIAL
+//
+//     The polynomial S_hi * (cos(r) - 1) + (C_hl + sigma) *
+//     (sin(r) - r) can be rearranged freely, since it is quite
+//     small, so we exploit parallelism to the fullest.
+//
+//          psc4       =   SC_4 * r_1
+//          msc4       =   psc4 * r
+//          r2         =   r * r
+//          msc2       =   SC_2 * r2
+//          r4         =   r2 * r2
+//          psc3       =   SC_3 + msc4
+//          psc1       =   SC_1 + msc2
+//          msc3       =   r4 * psc3
+//          sincospols =   psc1 + msc3
+//          pols       =   sincospols *
+//                         <S_hi * r^2 | (C_hl + sigma) * r^3>
+//
+//     4. CORRECTION TERM
+//
+//     This is where the "c" component of the range reduction is
+//     taken into account; recall that just "r" is used for most of
+//     the calculation.
+//
+//          -c   = m_3 - c_2
+//          -d   = S_hi * r - (C_hl + sigma)
+//          corr = -c * -d + S_lo
+//
+//     5. COMPENSATED SUMMATIONS
+//
+//     The two successive compensated summations add up the high
+//     and medium parts, leaving just the low parts to add up at
+//     the end.
+//
+//          rs        =  sigma * r
+//          res_int   =  S_hi + rs
+//          k_0       =  S_hi - res_int
+//          k_2       =  k_0 + rs
+//          med       =  C_hl * r
+//          res_hi    =  res_int + med
+//          k_1       =  res_int - res_hi
+//          k_3       =  k_1 + med
+//
+//     6. FINAL SUMMATION
+//
+//     We now add up all the small parts:
+//
+//          res_lo = pols(hi) + pols(lo) + corr + k_1 + k_3
+//
+//     Now the overall result is just:
+//
+//          res_hi + res_lo
+//
+//     7. SMALL ARGUMENTS
+//
+//     Inputs with |X| < 2^-252 are treated specially as
+//     1 - |x|.
+//
+// Special cases:
+//  cos(NaN) = quiet NaN, and raise invalid exception
+//  cos(INF) = NaN and raise invalid exception
+//  cos(0) = 1
+//
+/******************************************************************************/
+
+ALIGNED_(16) juint _static_const_table_cos[] =
+{
+    0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
+    0x00000000UL, 0x00000000UL, 0x3ff00000UL, 0x176d6d31UL, 0xbf73b92eUL,
+    0xbc29b42cUL, 0x3fb917a6UL, 0xe0000000UL, 0xbc3e2718UL, 0x00000000UL,
+    0x3ff00000UL, 0x011469fbUL, 0xbf93ad06UL, 0x3c69a60bUL, 0x3fc8f8b8UL,
+    0xc0000000UL, 0xbc626d19UL, 0x00000000UL, 0x3ff00000UL, 0x939d225aUL,
+    0xbfa60beaUL, 0x2ed59f06UL, 0x3fd29406UL, 0xa0000000UL, 0xbc75d28dUL,
+    0x00000000UL, 0x3ff00000UL, 0x866b95cfUL, 0xbfb37ca1UL, 0xa6aea963UL,
+    0x3fd87de2UL, 0xe0000000UL, 0xbc672cedUL, 0x00000000UL, 0x3ff00000UL,
+    0x73fa1279UL, 0xbfbe3a68UL, 0x3806f63bUL, 0x3fde2b5dUL, 0x20000000UL,
+    0x3c5e0d89UL, 0x00000000UL, 0x3ff00000UL, 0x5bc57974UL, 0xbfc59267UL,
+    0x39ae68c8UL, 0x3fe1c73bUL, 0x20000000UL, 0x3c8b25ddUL, 0x00000000UL,
+    0x3ff00000UL, 0x53aba2fdUL, 0xbfcd0dfeUL, 0x25091dd6UL, 0x3fe44cf3UL,
+    0x20000000UL, 0x3c68076aUL, 0x00000000UL, 0x3ff00000UL, 0x99fcef32UL,
+    0x3fca8279UL, 0x667f3bcdUL, 0x3fe6a09eUL, 0x20000000UL, 0xbc8bdd34UL,
+    0x00000000UL, 0x3fe00000UL, 0x94247758UL, 0x3fc133ccUL, 0x6b151741UL,
+    0x3fe8bc80UL, 0x20000000UL, 0xbc82c5e1UL, 0x00000000UL, 0x3fe00000UL,
+    0x9ae68c87UL, 0x3fac73b3UL, 0x290ea1a3UL, 0x3fea9b66UL, 0xe0000000UL,
+    0x3c39f630UL, 0x00000000UL, 0x3fe00000UL, 0x7f909c4eUL, 0xbf9d4a2cUL,
+    0xf180bdb1UL, 0x3fec38b2UL, 0x80000000UL, 0xbc76e0b1UL, 0x00000000UL,
+    0x3fe00000UL, 0x65455a75UL, 0xbfbe0875UL, 0xcf328d46UL, 0x3fed906bUL,
+    0x20000000UL, 0x3c7457e6UL, 0x00000000UL, 0x3fe00000UL, 0x76acf82dUL,
+    0x3fa4a031UL, 0x56c62ddaUL, 0x3fee9f41UL, 0xe0000000UL, 0x3c8760b1UL,
+    0x00000000UL, 0x3fd00000UL, 0x0e5967d5UL, 0xbfac1d1fUL, 0xcff75cb0UL,
+    0x3fef6297UL, 0x20000000UL, 0x3c756217UL, 0x00000000UL, 0x3fd00000UL,
+    0x0f592f50UL, 0xbf9ba165UL, 0xa3d12526UL, 0x3fefd88dUL, 0x40000000UL,
+    0xbc887df6UL, 0x00000000UL, 0x3fc00000UL, 0x00000000UL, 0x00000000UL,
+    0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
+    0x00000000UL, 0x0f592f50UL, 0x3f9ba165UL, 0xa3d12526UL, 0x3fefd88dUL,
+    0x40000000UL, 0xbc887df6UL, 0x00000000UL, 0xbfc00000UL, 0x0e5967d5UL,
+    0x3fac1d1fUL, 0xcff75cb0UL, 0x3fef6297UL, 0x20000000UL, 0x3c756217UL,
+    0x00000000UL, 0xbfd00000UL, 0x76acf82dUL, 0xbfa4a031UL, 0x56c62ddaUL,
+    0x3fee9f41UL, 0xe0000000UL, 0x3c8760b1UL, 0x00000000UL, 0xbfd00000UL,
+    0x65455a75UL, 0x3fbe0875UL, 0xcf328d46UL, 0x3fed906bUL, 0x20000000UL,
+    0x3c7457e6UL, 0x00000000UL, 0xbfe00000UL, 0x7f909c4eUL, 0x3f9d4a2cUL,
+    0xf180bdb1UL, 0x3fec38b2UL, 0x80000000UL, 0xbc76e0b1UL, 0x00000000UL,
+    0xbfe00000UL, 0x9ae68c87UL, 0xbfac73b3UL, 0x290ea1a3UL, 0x3fea9b66UL,
+    0xe0000000UL, 0x3c39f630UL, 0x00000000UL, 0xbfe00000UL, 0x94247758UL,
+    0xbfc133ccUL, 0x6b151741UL, 0x3fe8bc80UL, 0x20000000UL, 0xbc82c5e1UL,
+    0x00000000UL, 0xbfe00000UL, 0x99fcef32UL, 0xbfca8279UL, 0x667f3bcdUL,
+    0x3fe6a09eUL, 0x20000000UL, 0xbc8bdd34UL, 0x00000000UL, 0xbfe00000UL,
+    0x53aba2fdUL, 0x3fcd0dfeUL, 0x25091dd6UL, 0x3fe44cf3UL, 0x20000000UL,
+    0x3c68076aUL, 0x00000000UL, 0xbff00000UL, 0x5bc57974UL, 0x3fc59267UL,
+    0x39ae68c8UL, 0x3fe1c73bUL, 0x20000000UL, 0x3c8b25ddUL, 0x00000000UL,
+    0xbff00000UL, 0x73fa1279UL, 0x3fbe3a68UL, 0x3806f63bUL, 0x3fde2b5dUL,
+    0x20000000UL, 0x3c5e0d89UL, 0x00000000UL, 0xbff00000UL, 0x866b95cfUL,
+    0x3fb37ca1UL, 0xa6aea963UL, 0x3fd87de2UL, 0xe0000000UL, 0xbc672cedUL,
+    0x00000000UL, 0xbff00000UL, 0x939d225aUL, 0x3fa60beaUL, 0x2ed59f06UL,
+    0x3fd29406UL, 0xa0000000UL, 0xbc75d28dUL, 0x00000000UL, 0xbff00000UL,
+    0x011469fbUL, 0x3f93ad06UL, 0x3c69a60bUL, 0x3fc8f8b8UL, 0xc0000000UL,
+    0xbc626d19UL, 0x00000000UL, 0xbff00000UL, 0x176d6d31UL, 0x3f73b92eUL,
+    0xbc29b42cUL, 0x3fb917a6UL, 0xe0000000UL, 0xbc3e2718UL, 0x00000000UL,
+    0xbff00000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
+    0x00000000UL, 0x00000000UL, 0x00000000UL, 0xbff00000UL, 0x176d6d31UL,
+    0x3f73b92eUL, 0xbc29b42cUL, 0xbfb917a6UL, 0xe0000000UL, 0x3c3e2718UL,
+    0x00000000UL, 0xbff00000UL, 0x011469fbUL, 0x3f93ad06UL, 0x3c69a60bUL,
+    0xbfc8f8b8UL, 0xc0000000UL, 0x3c626d19UL, 0x00000000UL, 0xbff00000UL,
+    0x939d225aUL, 0x3fa60beaUL, 0x2ed59f06UL, 0xbfd29406UL, 0xa0000000UL,
+    0x3c75d28dUL, 0x00000000UL, 0xbff00000UL, 0x866b95cfUL, 0x3fb37ca1UL,
+    0xa6aea963UL, 0xbfd87de2UL, 0xe0000000UL, 0x3c672cedUL, 0x00000000UL,
+    0xbff00000UL, 0x73fa1279UL, 0x3fbe3a68UL, 0x3806f63bUL, 0xbfde2b5dUL,
+    0x20000000UL, 0xbc5e0d89UL, 0x00000000UL, 0xbff00000UL, 0x5bc57974UL,
+    0x3fc59267UL, 0x39ae68c8UL, 0xbfe1c73bUL, 0x20000000UL, 0xbc8b25ddUL,
+    0x00000000UL, 0xbff00000UL, 0x53aba2fdUL, 0x3fcd0dfeUL, 0x25091dd6UL,
+    0xbfe44cf3UL, 0x20000000UL, 0xbc68076aUL, 0x00000000UL, 0xbff00000UL,
+    0x99fcef32UL, 0xbfca8279UL, 0x667f3bcdUL, 0xbfe6a09eUL, 0x20000000UL,
+    0x3c8bdd34UL, 0x00000000UL, 0xbfe00000UL, 0x94247758UL, 0xbfc133ccUL,
+    0x6b151741UL, 0xbfe8bc80UL, 0x20000000UL, 0x3c82c5e1UL, 0x00000000UL,
+    0xbfe00000UL, 0x9ae68c87UL, 0xbfac73b3UL, 0x290ea1a3UL, 0xbfea9b66UL,
+    0xe0000000UL, 0xbc39f630UL, 0x00000000UL, 0xbfe00000UL, 0x7f909c4eUL,
+    0x3f9d4a2cUL, 0xf180bdb1UL, 0xbfec38b2UL, 0x80000000UL, 0x3c76e0b1UL,
+    0x00000000UL, 0xbfe00000UL, 0x65455a75UL, 0x3fbe0875UL, 0xcf328d46UL,
+    0xbfed906bUL, 0x20000000UL, 0xbc7457e6UL, 0x00000000UL, 0xbfe00000UL,
+    0x76acf82dUL, 0xbfa4a031UL, 0x56c62ddaUL, 0xbfee9f41UL, 0xe0000000UL,
+    0xbc8760b1UL, 0x00000000UL, 0xbfd00000UL, 0x0e5967d5UL, 0x3fac1d1fUL,
+    0xcff75cb0UL, 0xbfef6297UL, 0x20000000UL, 0xbc756217UL, 0x00000000UL,
+    0xbfd00000UL, 0x0f592f50UL, 0x3f9ba165UL, 0xa3d12526UL, 0xbfefd88dUL,
+    0x40000000UL, 0x3c887df6UL, 0x00000000UL, 0xbfc00000UL, 0x00000000UL,
+    0x00000000UL, 0x00000000UL, 0xbff00000UL, 0x00000000UL, 0x00000000UL,
+    0x00000000UL, 0x00000000UL, 0x0f592f50UL, 0xbf9ba165UL, 0xa3d12526UL,
+    0xbfefd88dUL, 0x40000000UL, 0x3c887df6UL, 0x00000000UL, 0x3fc00000UL,
+    0x0e5967d5UL, 0xbfac1d1fUL, 0xcff75cb0UL, 0xbfef6297UL, 0x20000000UL,
+    0xbc756217UL, 0x00000000UL, 0x3fd00000UL, 0x76acf82dUL, 0x3fa4a031UL,
+    0x56c62ddaUL, 0xbfee9f41UL, 0xe0000000UL, 0xbc8760b1UL, 0x00000000UL,
+    0x3fd00000UL, 0x65455a75UL, 0xbfbe0875UL, 0xcf328d46UL, 0xbfed906bUL,
+    0x20000000UL, 0xbc7457e6UL, 0x00000000UL, 0x3fe00000UL, 0x7f909c4eUL,
+    0xbf9d4a2cUL, 0xf180bdb1UL, 0xbfec38b2UL, 0x80000000UL, 0x3c76e0b1UL,
+    0x00000000UL, 0x3fe00000UL, 0x9ae68c87UL, 0x3fac73b3UL, 0x290ea1a3UL,
+    0xbfea9b66UL, 0xe0000000UL, 0xbc39f630UL, 0x00000000UL, 0x3fe00000UL,
+    0x94247758UL, 0x3fc133ccUL, 0x6b151741UL, 0xbfe8bc80UL, 0x20000000UL,
+    0x3c82c5e1UL, 0x00000000UL, 0x3fe00000UL, 0x99fcef32UL, 0x3fca8279UL,
+    0x667f3bcdUL, 0xbfe6a09eUL, 0x20000000UL, 0x3c8bdd34UL, 0x00000000UL,
+    0x3fe00000UL, 0x53aba2fdUL, 0xbfcd0dfeUL, 0x25091dd6UL, 0xbfe44cf3UL,
+    0x20000000UL, 0xbc68076aUL, 0x00000000UL, 0x3ff00000UL, 0x5bc57974UL,
+    0xbfc59267UL, 0x39ae68c8UL, 0xbfe1c73bUL, 0x20000000UL, 0xbc8b25ddUL,
+    0x00000000UL, 0x3ff00000UL, 0x73fa1279UL, 0xbfbe3a68UL, 0x3806f63bUL,
+    0xbfde2b5dUL, 0x20000000UL, 0xbc5e0d89UL, 0x00000000UL, 0x3ff00000UL,
+    0x866b95cfUL, 0xbfb37ca1UL, 0xa6aea963UL, 0xbfd87de2UL, 0xe0000000UL,
+    0x3c672cedUL, 0x00000000UL, 0x3ff00000UL, 0x939d225aUL, 0xbfa60beaUL,
+    0x2ed59f06UL, 0xbfd29406UL, 0xa0000000UL, 0x3c75d28dUL, 0x00000000UL,
+    0x3ff00000UL, 0x011469fbUL, 0xbf93ad06UL, 0x3c69a60bUL, 0xbfc8f8b8UL,
+    0xc0000000UL, 0x3c626d19UL, 0x00000000UL, 0x3ff00000UL, 0x176d6d31UL,
+    0xbf73b92eUL, 0xbc29b42cUL, 0xbfb917a6UL, 0xe0000000UL, 0x3c3e2718UL,
+    0x00000000UL, 0x3ff00000UL, 0x55555555UL, 0xbfc55555UL, 0x00000000UL,
+    0xbfe00000UL, 0x11111111UL, 0x3f811111UL, 0x55555555UL, 0x3fa55555UL,
+    0x1a01a01aUL, 0xbf2a01a0UL, 0x16c16c17UL, 0xbf56c16cUL, 0xa556c734UL,
+    0x3ec71de3UL, 0x1a01a01aUL, 0x3efa01a0UL, 0x1a600000UL, 0x3d90b461UL,
+    0x1a600000UL, 0x3d90b461UL, 0x54400000UL, 0x3fb921fbUL, 0x00000000UL,
+    0x00000000UL, 0x2e037073UL, 0x3b63198aUL, 0x00000000UL, 0x00000000UL,
+    0x6dc9c883UL, 0x40245f30UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
+    0x43380000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x3ff00000UL,
+    0x00000000UL, 0x00000000UL, 0x00000000UL, 0x80000000UL, 0x00000000UL,
+    0x00000000UL, 0x00000000UL, 0x80000000UL, 0x00000000UL, 0x00000000UL,
+    0x00000000UL, 0x3fe00000UL, 0x00000000UL, 0x3fe00000UL
+};
+
+//registers,
+// input: (rbp + 8)
+// scratch: xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7
+//          rax, rdx, rcx, rbx (tmp)
+
+// Code generated by Intel C compiler for LIBM library
+
+void MacroAssembler::fast_cos(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ecx, Register edx, Register tmp) {
+  Label L_2TAG_PACKET_0_0_2, L_2TAG_PACKET_1_0_2, L_2TAG_PACKET_2_0_2, L_2TAG_PACKET_3_0_2;
+  Label L_2TAG_PACKET_4_0_2, L_2TAG_PACKET_5_0_2, L_2TAG_PACKET_6_0_2, L_2TAG_PACKET_7_0_2;
+  Label L_2TAG_PACKET_8_0_2, L_2TAG_PACKET_9_0_2, L_2TAG_PACKET_10_0_2, L_2TAG_PACKET_11_0_2;
+  Label L_2TAG_PACKET_12_0_2, L_2TAG_PACKET_13_0_2, B1_3, B1_5, start;
+
+  assert_different_registers(tmp, eax, ecx, edx);
+
+  address static_const_table_cos = (address)_static_const_table_cos;
+
+  bind(start);
+  subl(rsp, 120);
+  movl(Address(rsp, 56), tmp);
+  lea(tmp, ExternalAddress(static_const_table_cos));
+  movsd(xmm0, Address(rsp, 128));
+  pextrw(eax, xmm0, 3);
+  andl(eax, 32767);
+  subl(eax, 12336);
+  cmpl(eax, 4293);
+  jcc(Assembler::above, L_2TAG_PACKET_0_0_2);
+  movsd(xmm1, Address(tmp, 2160));
+  mulsd(xmm1, xmm0);
+  movdqu(xmm5, Address(tmp, 2240));
+  movsd(xmm4, Address(tmp, 2224));
+  pand(xmm4, xmm0);
+  por(xmm5, xmm4);
+  movsd(xmm3, Address(tmp, 2128));
+  movdqu(xmm2, Address(tmp, 2112));
+  addpd(xmm1, xmm5);
+  cvttsd2sil(edx, xmm1);
+  cvtsi2sdl(xmm1, edx);
+  mulsd(xmm3, xmm1);
+  unpcklpd(xmm1, xmm1);
+  addl(edx, 1865232);
+  movdqu(xmm4, xmm0);
+  andl(edx, 63);
+  movdqu(xmm5, Address(tmp, 2096));
+  lea(eax, Address(tmp, 0));
+  shll(edx, 5);
+  addl(eax, edx);
+  mulpd(xmm2, xmm1);
+  subsd(xmm0, xmm3);
+  mulsd(xmm1, Address(tmp, 2144));
+  subsd(xmm4, xmm3);
+  movsd(xmm7, Address(eax, 8));
+  unpcklpd(xmm0, xmm0);
+  movapd(xmm3, xmm4);
+  subsd(xmm4, xmm2);
+  mulpd(xmm5, xmm0);
+  subpd(xmm0, xmm2);
+  movdqu(xmm6, Address(tmp, 2064));
+  mulsd(xmm7, xmm4);
+  subsd(xmm3, xmm4);
+  mulpd(xmm5, xmm0);
+  mulpd(xmm0, xmm0);
+  subsd(xmm3, xmm2);
+  movdqu(xmm2, Address(eax, 0));
+  subsd(xmm1, xmm3);
+  movsd(xmm3, Address(eax, 24));
+  addsd(xmm2, xmm3);
+  subsd(xmm7, xmm2);
+  mulsd(xmm2, xmm4);
+  mulpd(xmm6, xmm0);
+  mulsd(xmm3, xmm4);
+  mulpd(xmm2, xmm0);
+  mulpd(xmm0, xmm0);
+  addpd(xmm5, Address(tmp, 2080));
+  mulsd(xmm4, Address(eax, 0));
+  addpd(xmm6, Address(tmp, 2048));
+  mulpd(xmm5, xmm0);
+  movapd(xmm0, xmm3);
+  addsd(xmm3, Address(eax, 8));
+  mulpd(xmm1, xmm7);
+  movapd(xmm7, xmm4);
+  addsd(xmm4, xmm3);
+  addpd(xmm6, xmm5);
+  movsd(xmm5, Address(eax, 8));
+  subsd(xmm5, xmm3);
+  subsd(xmm3, xmm4);
+  addsd(xmm1, Address(eax, 16));
+  mulpd(xmm6, xmm2);
+  addsd(xmm5, xmm0);
+  addsd(xmm3, xmm7);
+  addsd(xmm1, xmm5);
+  addsd(xmm1, xmm3);
+  addsd(xmm1, xmm6);
+  unpckhpd(xmm6, xmm6);
+  addsd(xmm1, xmm6);
+  addsd(xmm4, xmm1);
+  movsd(Address(rsp, 0), xmm4);
+  fld_d(Address(rsp, 0));
+  jmp(L_2TAG_PACKET_1_0_2);
+
+  bind(L_2TAG_PACKET_0_0_2);
+  jcc(Assembler::greater, L_2TAG_PACKET_2_0_2);
+  pextrw(eax, xmm0, 3);
+  andl(eax, 32767);
+  pinsrw(xmm0, eax, 3);
+  movsd(xmm1, Address(tmp, 2192));
+  subsd(xmm1, xmm0);
+  movsd(Address(rsp, 0), xmm1);
+  fld_d(Address(rsp, 0));
+  jmp(L_2TAG_PACKET_1_0_2);
+
+  bind(L_2TAG_PACKET_2_0_2);
+  movl(eax, Address(rsp, 132));
+  andl(eax, 2146435072);
+  cmpl(eax, 2146435072);
+  jcc(Assembler::equal, L_2TAG_PACKET_3_0_2);
+  subl(rsp, 32);
+  movsd(Address(rsp, 0), xmm0);
+  lea(eax, Address(rsp, 40));
+  movl(Address(rsp, 8), eax);
+  movl(eax, 1);
+  movl(Address(rsp, 12), eax);
+  call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::dlibm_sin_cos_huge())));
+  addl(rsp, 32);
+  fld_d(Address(rsp, 8));
+  jmp(L_2TAG_PACKET_1_0_2);
+
+  bind(L_2TAG_PACKET_3_0_2);
+  fld_d(Address(rsp, 128));
+  fmul_d(Address(tmp, 2208));
+
+  bind(L_2TAG_PACKET_1_0_2);
+  movl(tmp, Address(rsp, 56));
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/src/cpu/x86/vm/macroAssembler_libm_x86_64.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -0,0 +1,3945 @@
+/*
+ * Copyright (c) 2015, Intel Corporation.
+ * Intel Math Library (LIBM) Source Code
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+#include "precompiled.hpp"
+#include "asm/assembler.hpp"
+#include "asm/assembler.inline.hpp"
+#include "macroAssembler_x86.hpp"
+
+#ifdef _MSC_VER
+#define ALIGNED_(x) __declspec(align(x))
+#else
+#define ALIGNED_(x) __attribute__ ((aligned(x)))
+#endif
+
+// The 64 bit code is at most SSE2 compliant
+
+/******************************************************************************/
+//                     ALGORITHM DESCRIPTION - EXP()
+//                     ---------------------
+//
+// 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
+//
+/******************************************************************************/
+
+ALIGNED_(16) juint _cv[] =
+{
+    0x652b82feUL, 0x40571547UL, 0x652b82feUL, 0x40571547UL, 0xfefa0000UL,
+    0x3f862e42UL, 0xfefa0000UL, 0x3f862e42UL, 0xbc9e3b3aUL, 0x3d1cf79aUL,
+    0xbc9e3b3aUL, 0x3d1cf79aUL, 0xfffffffeUL, 0x3fdfffffUL, 0xfffffffeUL,
+    0x3fdfffffUL, 0xe3289860UL, 0x3f56c15cUL, 0x555b9e25UL, 0x3fa55555UL,
+    0xc090cf0fUL, 0x3f811115UL, 0x55548ba1UL, 0x3fc55555UL
+};
+
+ALIGNED_(16) juint _shifter[] =
+{
+    0x00000000UL, 0x43380000UL, 0x00000000UL, 0x43380000UL
+};
+
+ALIGNED_(16) juint _mmask[] =
+{
+    0xffffffc0UL, 0x00000000UL, 0xffffffc0UL, 0x00000000UL
+};
+
+ALIGNED_(16) juint _bias[] =
+{
+    0x0000ffc0UL, 0x00000000UL, 0x0000ffc0UL, 0x00000000UL
+};
+
+ALIGNED_(16) juint _Tbl_addr[] =
+{
+    0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x0e03754dUL,
+    0x3cad7bbfUL, 0x3e778060UL, 0x00002c9aUL, 0x3567f613UL, 0x3c8cd252UL,
+    0xd3158574UL, 0x000059b0UL, 0x61e6c861UL, 0x3c60f74eUL, 0x18759bc8UL,
+    0x00008745UL, 0x5d837b6cUL, 0x3c979aa6UL, 0x6cf9890fUL, 0x0000b558UL,
+    0x702f9cd1UL, 0x3c3ebe3dUL, 0x32d3d1a2UL, 0x0000e3ecUL, 0x1e63bcd8UL,
+    0x3ca3516eUL, 0xd0125b50UL, 0x00011301UL, 0x26f0387bUL, 0x3ca4c554UL,
+    0xaea92ddfUL, 0x0001429aUL, 0x62523fb6UL, 0x3ca95153UL, 0x3c7d517aUL,
+    0x000172b8UL, 0x3f1353bfUL, 0x3c8b898cUL, 0xeb6fcb75UL, 0x0001a35bUL,
+    0x3e3a2f5fUL, 0x3c9aecf7UL, 0x3168b9aaUL, 0x0001d487UL, 0x44a6c38dUL,
+    0x3c8a6f41UL, 0x88628cd6UL, 0x0002063bUL, 0xe3a8a894UL, 0x3c968efdUL,
+    0x6e756238UL, 0x0002387aUL, 0x981fe7f2UL, 0x3c80472bUL, 0x65e27cddUL,
+    0x00026b45UL, 0x6d09ab31UL, 0x3c82f7e1UL, 0xf51fdee1UL, 0x00029e9dUL,
+    0x720c0ab3UL, 0x3c8b3782UL, 0xa6e4030bUL, 0x0002d285UL, 0x4db0abb6UL,
+    0x3c834d75UL, 0x0a31b715UL, 0x000306feUL, 0x5dd3f84aUL, 0x3c8fdd39UL,
+    0xb26416ffUL, 0x00033c08UL, 0xcc187d29UL, 0x3ca12f8cUL, 0x373aa9caUL,
+    0x000371a7UL, 0x738b5e8bUL, 0x3ca7d229UL, 0x34e59ff6UL, 0x0003a7dbUL,
+    0xa72a4c6dUL, 0x3c859f48UL, 0x4c123422UL, 0x0003dea6UL, 0x259d9205UL,
+    0x3ca8b846UL, 0x21f72e29UL, 0x0004160aUL, 0x60c2ac12UL, 0x3c4363edUL,
+    0x6061892dUL, 0x00044e08UL, 0xdaa10379UL, 0x3c6ecce1UL, 0xb5c13cd0UL,
+    0x000486a2UL, 0xbb7aafb0UL, 0x3c7690ceUL, 0xd5362a27UL, 0x0004bfdaUL,
+    0x9b282a09UL, 0x3ca083ccUL, 0x769d2ca6UL, 0x0004f9b2UL, 0xc1aae707UL,
+    0x3ca509b0UL, 0x569d4f81UL, 0x0005342bUL, 0x18fdd78eUL, 0x3c933505UL,
+    0x36b527daUL, 0x00056f47UL, 0xe21c5409UL, 0x3c9063e1UL, 0xdd485429UL,
+    0x0005ab07UL, 0x2b64c035UL, 0x3c9432e6UL, 0x15ad2148UL, 0x0005e76fUL,
+    0x99f08c0aUL, 0x3ca01284UL, 0xb03a5584UL, 0x0006247eUL, 0x0073dc06UL,
+    0x3c99f087UL, 0x82552224UL, 0x00066238UL, 0x0da05571UL, 0x3c998d4dUL,
+    0x667f3bccUL, 0x0006a09eUL, 0x86ce4786UL, 0x3ca52bb9UL, 0x3c651a2eUL,
+    0x0006dfb2UL, 0x206f0dabUL, 0x3ca32092UL, 0xe8ec5f73UL, 0x00071f75UL,
+    0x8e17a7a6UL, 0x3ca06122UL, 0x564267c8UL, 0x00075febUL, 0x461e9f86UL,
+    0x3ca244acUL, 0x73eb0186UL, 0x0007a114UL, 0xabd66c55UL, 0x3c65ebe1UL,
+    0x36cf4e62UL, 0x0007e2f3UL, 0xbbff67d0UL, 0x3c96fe9fUL, 0x994cce12UL,
+    0x00082589UL, 0x14c801dfUL, 0x3c951f14UL, 0x9b4492ecUL, 0x000868d9UL,
+    0xc1f0eab4UL, 0x3c8db72fUL, 0x422aa0dbUL, 0x0008ace5UL, 0x59f35f44UL,
+    0x3c7bf683UL, 0x99157736UL, 0x0008f1aeUL, 0x9c06283cUL, 0x3ca360baUL,
+    0xb0cdc5e4UL, 0x00093737UL, 0x20f962aaUL, 0x3c95e8d1UL, 0x9fde4e4fUL,
+    0x00097d82UL, 0x2b91ce27UL, 0x3c71affcUL, 0x82a3f090UL, 0x0009c491UL,
+    0x589a2ebdUL, 0x3c9b6d34UL, 0x7b5de564UL, 0x000a0c66UL, 0x9ab89880UL,
+    0x3c95277cUL, 0xb23e255cUL, 0x000a5503UL, 0x6e735ab3UL, 0x3c846984UL,
+    0x5579fdbfUL, 0x000a9e6bUL, 0x92cb3387UL, 0x3c8c1a77UL, 0x995ad3adUL,
+    0x000ae89fUL, 0xdc2d1d96UL, 0x3ca22466UL, 0xb84f15faUL, 0x000b33a2UL,
+    0xb19505aeUL, 0x3ca1112eUL, 0xf2fb5e46UL, 0x000b7f76UL, 0x0a5fddcdUL,
+    0x3c74ffd7UL, 0x904bc1d2UL, 0x000bcc1eUL, 0x30af0cb3UL, 0x3c736eaeUL,
+    0xdd85529cUL, 0x000c199bUL, 0xd10959acUL, 0x3c84e08fUL, 0x2e57d14bUL,
+    0x000c67f1UL, 0x6c921968UL, 0x3c676b2cUL, 0xdcef9069UL, 0x000cb720UL,
+    0x36df99b3UL, 0x3c937009UL, 0x4a07897bUL, 0x000d072dUL, 0xa63d07a7UL,
+    0x3c74a385UL, 0xdcfba487UL, 0x000d5818UL, 0xd5c192acUL, 0x3c8e5a50UL,
+    0x03db3285UL, 0x000da9e6UL, 0x1c4a9792UL, 0x3c98bb73UL, 0x337b9b5eUL,
+    0x000dfc97UL, 0x603a88d3UL, 0x3c74b604UL, 0xe78b3ff6UL, 0x000e502eUL,
+    0x92094926UL, 0x3c916f27UL, 0xa2a490d9UL, 0x000ea4afUL, 0x41aa2008UL,
+    0x3c8ec3bcUL, 0xee615a27UL, 0x000efa1bUL, 0x31d185eeUL, 0x3c8a64a9UL,
+    0x5b6e4540UL, 0x000f5076UL, 0x4d91cd9dUL, 0x3c77893bUL, 0x819e90d8UL,
+    0x000fa7c1UL
+};
+
+ALIGNED_(16) juint _ALLONES[] =
+{
+    0xffffffffUL, 0xffffffffUL, 0xffffffffUL, 0xffffffffUL
+};
+
+ALIGNED_(16) juint _ebias[] =
+{
+    0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0x3ff00000UL
+};
+
+ALIGNED_(4) juint _XMAX[] =
+{
+    0xffffffffUL, 0x7fefffffUL
+};
+
+ALIGNED_(4) juint _XMIN[] =
+{
+    0x00000000UL, 0x00100000UL
+};
+
+ALIGNED_(4) juint _INF[] =
+{
+    0x00000000UL, 0x7ff00000UL
+};
+
+ALIGNED_(4) juint _ZERO[] =
+{
+    0x00000000UL, 0x00000000UL
+};
+
+ALIGNED_(4) juint _ONE_val[] =
+{
+    0x00000000UL, 0x3ff00000UL
+};
+
+
+// Registers:
+// input: xmm0
+// scratch: xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7
+//          rax, rdx, rcx, tmp - r11
+
+// Code generated by Intel C compiler for LIBM library
+
+void MacroAssembler::fast_exp(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ecx, Register edx, Register tmp) {
+  Label L_2TAG_PACKET_0_0_2, L_2TAG_PACKET_1_0_2, L_2TAG_PACKET_2_0_2, L_2TAG_PACKET_3_0_2;
+  Label L_2TAG_PACKET_4_0_2, L_2TAG_PACKET_5_0_2, L_2TAG_PACKET_6_0_2, L_2TAG_PACKET_7_0_2;
+  Label L_2TAG_PACKET_8_0_2, L_2TAG_PACKET_9_0_2, L_2TAG_PACKET_10_0_2, L_2TAG_PACKET_11_0_2;
+  Label L_2TAG_PACKET_12_0_2, B1_3, B1_5, start;
+
+  assert_different_registers(tmp, eax, ecx, edx);
+  jmp(start);
+  address cv = (address)_cv;
+  address Shifter = (address)_shifter;
+  address mmask = (address)_mmask;
+  address bias = (address)_bias;
+  address Tbl_addr = (address)_Tbl_addr;
+  address ALLONES = (address)_ALLONES;
+  address ebias = (address)_ebias;
+  address XMAX = (address)_XMAX;
+  address XMIN = (address)_XMIN;
+  address INF = (address)_INF;
+  address ZERO = (address)_ZERO;
+  address ONE_val = (address)_ONE_val;
+
+  bind(start);
+  subq(rsp, 24);
+  movsd(Address(rsp, 8), xmm0);
+  unpcklpd(xmm0, xmm0);
+  movdqu(xmm1, ExternalAddress(cv));       // 0x652b82feUL, 0x40571547UL, 0x652b82feUL, 0x40571547UL
+  movdqu(xmm6, ExternalAddress(Shifter));  // 0x00000000UL, 0x43380000UL, 0x00000000UL, 0x43380000UL
+  movdqu(xmm2, ExternalAddress(16+cv));    // 0xfefa0000UL, 0x3f862e42UL, 0xfefa0000UL, 0x3f862e42UL
+  movdqu(xmm3, ExternalAddress(32+cv));    // 0xbc9e3b3aUL, 0x3d1cf79aUL, 0xbc9e3b3aUL, 0x3d1cf79aUL
+  pextrw(eax, xmm0, 3);
+  andl(eax, 32767);
+  movl(edx, 16527);
+  subl(edx, eax);
+  subl(eax, 15504);
+  orl(edx, eax);
+  cmpl(edx, INT_MIN);
+  jcc(Assembler::aboveEqual, L_2TAG_PACKET_0_0_2);
+  mulpd(xmm1, xmm0);
+  addpd(xmm1, xmm6);
+  movapd(xmm7, xmm1);
+  subpd(xmm1, xmm6);
+  mulpd(xmm2, xmm1);
+  movdqu(xmm4, ExternalAddress(64+cv));    // 0xe3289860UL, 0x3f56c15cUL, 0x555b9e25UL, 0x3fa55555UL
+  mulpd(xmm3, xmm1);
+  movdqu(xmm5, ExternalAddress(80+cv));    // 0xc090cf0fUL, 0x3f811115UL, 0x55548ba1UL, 0x3fc55555UL
+  subpd(xmm0, xmm2);
+  movdl(eax, xmm7);
+  movl(ecx, eax);
+  andl(ecx, 63);
+  shll(ecx, 4);
+  sarl(eax, 6);
+  movl(edx, eax);
+  movdqu(xmm6, ExternalAddress(mmask));    // 0xffffffc0UL, 0x00000000UL, 0xffffffc0UL, 0x00000000UL
+  pand(xmm7, xmm6);
+  movdqu(xmm6, ExternalAddress(bias));     // 0x0000ffc0UL, 0x00000000UL, 0x0000ffc0UL, 0x00000000UL
+  paddq(xmm7, xmm6);
+  psllq(xmm7, 46);
+  subpd(xmm0, xmm3);
+  lea(tmp, ExternalAddress(Tbl_addr));
+  movdqu(xmm2, Address(ecx,tmp));
+  mulpd(xmm4, xmm0);
+  movapd(xmm6, xmm0);
+  movapd(xmm1, xmm0);
+  mulpd(xmm6, xmm6);
+  mulpd(xmm0, xmm6);
+  addpd(xmm5, xmm4);
+  mulsd(xmm0, xmm6);
+  mulpd(xmm6, ExternalAddress(48+cv));     // 0xfffffffeUL, 0x3fdfffffUL, 0xfffffffeUL, 0x3fdfffffUL
+  addsd(xmm1, xmm2);
+  unpckhpd(xmm2, xmm2);
+  mulpd(xmm0, xmm5);
+  addsd(xmm1, xmm0);
+  por(xmm2, xmm7);
+  unpckhpd(xmm0, xmm0);
+  addsd(xmm0, xmm1);
+  addsd(xmm0, xmm6);
+  addl(edx, 894);
+  cmpl(edx, 1916);
+  jcc (Assembler::above, L_2TAG_PACKET_1_0_2);
+  mulsd(xmm0, xmm2);
+  addsd(xmm0, xmm2);
+  jmp (B1_5);
+
+  bind(L_2TAG_PACKET_1_0_2);
+  xorpd(xmm3, xmm3);
+  movdqu(xmm4, ExternalAddress(ALLONES));  // 0xffffffffUL, 0xffffffffUL, 0xffffffffUL, 0xffffffffUL
+  movl(edx, -1022);
+  subl(edx, eax);
+  movdl(xmm5, edx);
+  psllq(xmm4, xmm5);
+  movl(ecx, eax);
+  sarl(eax, 1);
+  pinsrw(xmm3, eax, 3);
+  movdqu(xmm6, ExternalAddress(ebias));    // 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0x3ff00000UL
+  psllq(xmm3, 4);
+  psubd(xmm2, xmm3);
+  mulsd(xmm0, xmm2);
+  cmpl(edx, 52);
+  jcc(Assembler::greater, L_2TAG_PACKET_2_0_2);
+  pand(xmm4, xmm2);
+  paddd(xmm3, xmm6);
+  subsd(xmm2, xmm4);
+  addsd(xmm0, xmm2);
+  cmpl(ecx, 1023);
+  jcc(Assembler::greaterEqual, L_2TAG_PACKET_3_0_2);
+  pextrw(ecx, xmm0, 3);
+  andl(ecx, 32768);
+  orl(edx, ecx);
+  cmpl(edx, 0);
+  jcc(Assembler::equal, L_2TAG_PACKET_4_0_2);
+  movapd(xmm6, xmm0);
+  addsd(xmm0, xmm4);
+  mulsd(xmm0, xmm3);
+  pextrw(ecx, xmm0, 3);
+  andl(ecx, 32752);
+  cmpl(ecx, 0);
+  jcc(Assembler::equal, L_2TAG_PACKET_5_0_2);
+  jmp(B1_5);
+
+  bind(L_2TAG_PACKET_5_0_2);
+  mulsd(xmm6, xmm3);
+  mulsd(xmm4, xmm3);
+  movdqu(xmm0, xmm6);
+  pxor(xmm6, xmm4);
+  psrad(xmm6, 31);
+  pshufd(xmm6, xmm6, 85);
+  psllq(xmm0, 1);
+  psrlq(xmm0, 1);
+  pxor(xmm0, xmm6);
+  psrlq(xmm6, 63);
+  paddq(xmm0, xmm6);
+  paddq(xmm0, xmm4);
+  movl(Address(rsp,0), 15);
+  jmp(L_2TAG_PACKET_6_0_2);
+
+  bind(L_2TAG_PACKET_4_0_2);
+  addsd(xmm0, xmm4);
+  mulsd(xmm0, xmm3);
+  jmp(B1_5);
+
+  bind(L_2TAG_PACKET_3_0_2);
+  addsd(xmm0, xmm4);
+  mulsd(xmm0, xmm3);
+  pextrw(ecx, xmm0, 3);
+  andl(ecx, 32752);
+  cmpl(ecx, 32752);
+  jcc(Assembler::aboveEqual, L_2TAG_PACKET_7_0_2);
+  jmp(B1_5);
+
+  bind(L_2TAG_PACKET_2_0_2);
+  paddd(xmm3, xmm6);
+  addpd(xmm0, xmm2);
+  mulsd(xmm0, xmm3);
+  movl(Address(rsp,0), 15);
+  jmp(L_2TAG_PACKET_6_0_2);
+
+  bind(L_2TAG_PACKET_8_0_2);
+  cmpl(eax, 2146435072);
+  jcc(Assembler::aboveEqual, L_2TAG_PACKET_9_0_2);
+  movl(eax, Address(rsp,12));
+  cmpl(eax, INT_MIN);
+  jcc(Assembler::aboveEqual, L_2TAG_PACKET_10_0_2);
+  movsd(xmm0, ExternalAddress(XMAX));      // 0xffffffffUL, 0x7fefffffUL
+  mulsd(xmm0, xmm0);
+
+  bind(L_2TAG_PACKET_7_0_2);
+  movl(Address(rsp,0), 14);
+  jmp(L_2TAG_PACKET_6_0_2);
+
+  bind(L_2TAG_PACKET_10_0_2);
+  movsd(xmm0, ExternalAddress(XMIN));      // 0x00000000UL, 0x00100000UL
+  mulsd(xmm0, xmm0);
+  movl(Address(rsp,0), 15);
+  jmp(L_2TAG_PACKET_6_0_2);
+
+  bind(L_2TAG_PACKET_9_0_2);
+  movl(edx, Address(rsp,8));
+  cmpl(eax, 2146435072);
+  jcc(Assembler::above, L_2TAG_PACKET_11_0_2);
+  cmpl(edx, 0);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_11_0_2);
+  movl(eax, Address(rsp,12));
+  cmpl(eax, 2146435072);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_12_0_2);
+  movsd(xmm0, ExternalAddress(INF));       // 0x00000000UL, 0x7ff00000UL
+  jmp(B1_5);
+
+  bind(L_2TAG_PACKET_12_0_2);
+  movsd(xmm0, ExternalAddress(ZERO));      // 0x00000000UL, 0x00000000UL
+  jmp(B1_5);
+
+  bind(L_2TAG_PACKET_11_0_2);
+  movsd(xmm0, Address(rsp, 8));
+  addsd(xmm0, xmm0);
+  jmp(B1_5);
+
+  bind(L_2TAG_PACKET_0_0_2);
+  movl(eax, Address(rsp, 12));
+  andl(eax, 2147483647);
+  cmpl(eax, 1083179008);
+  jcc(Assembler::aboveEqual, L_2TAG_PACKET_8_0_2);
+  movsd(Address(rsp, 8), xmm0);
+  addsd(xmm0, ExternalAddress(ONE_val));   // 0x00000000UL, 0x3ff00000UL
+  jmp(B1_5);
+
+  bind(L_2TAG_PACKET_6_0_2);
+  movq(Address(rsp, 16), xmm0);
+
+  bind(B1_3);
+  movq(xmm0, Address(rsp, 16));
+
+  bind(B1_5);
+  addq(rsp, 24);
+}
+
+/******************************************************************************/
+//                     ALGORITHM DESCRIPTION - LOG()
+//                     ---------------------
+//
+//    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
+//
+/******************************************************************************/
+
+ALIGNED_(16) juint _L_tbl[] =
+{
+  0xfefa3800UL, 0x3fe62e42UL, 0x93c76730UL, 0x3d2ef357UL, 0xaa241800UL,
+  0x3fe5ee82UL, 0x0cda46beUL, 0x3d220238UL, 0x5c364800UL, 0x3fe5af40UL,
+  0xac10c9fbUL, 0x3d2dfa63UL, 0x26bb8c00UL, 0x3fe5707aUL, 0xff3303ddUL,
+  0x3d09980bUL, 0x26867800UL, 0x3fe5322eUL, 0x5d257531UL, 0x3d05ccc4UL,
+  0x835a5000UL, 0x3fe4f45aUL, 0x6d93b8fbUL, 0xbd2e6c51UL, 0x6f970c00UL,
+  0x3fe4b6fdUL, 0xed4c541cUL, 0x3cef7115UL, 0x27e8a400UL, 0x3fe47a15UL,
+  0xf94d60aaUL, 0xbd22cb6aUL, 0xf2f92400UL, 0x3fe43d9fUL, 0x481051f7UL,
+  0xbcfd984fUL, 0x2125cc00UL, 0x3fe4019cUL, 0x30f0c74cUL, 0xbd26ce79UL,
+  0x0c36c000UL, 0x3fe3c608UL, 0x7cfe13c2UL, 0xbd02b736UL, 0x17197800UL,
+  0x3fe38ae2UL, 0xbb5569a4UL, 0xbd218b7aUL, 0xad9d8c00UL, 0x3fe35028UL,
+  0x9527e6acUL, 0x3d10b83fUL, 0x44340800UL, 0x3fe315daUL, 0xc5a0ed9cUL,
+  0xbd274e93UL, 0x57b0e000UL, 0x3fe2dbf5UL, 0x07b9dc11UL, 0xbd17a6e5UL,
+  0x6d0ec000UL, 0x3fe2a278UL, 0xe797882dUL, 0x3d206d2bUL, 0x1134dc00UL,
+  0x3fe26962UL, 0x05226250UL, 0xbd0b61f1UL, 0xd8bebc00UL, 0x3fe230b0UL,
+  0x6e48667bUL, 0x3d12fc06UL, 0x5fc61800UL, 0x3fe1f863UL, 0xc9fe81d3UL,
+  0xbd2a7242UL, 0x49ae6000UL, 0x3fe1c078UL, 0xed70e667UL, 0x3cccacdeUL,
+  0x40f23c00UL, 0x3fe188eeUL, 0xf8ab4650UL, 0x3d14cc4eUL, 0xf6f29800UL,
+  0x3fe151c3UL, 0xa293ae49UL, 0xbd2edd97UL, 0x23c75c00UL, 0x3fe11af8UL,
+  0xbb9ddcb2UL, 0xbd258647UL, 0x8611cc00UL, 0x3fe0e489UL, 0x07801742UL,
+  0x3d1c2998UL, 0xe2d05400UL, 0x3fe0ae76UL, 0x887e7e27UL, 0x3d1f486bUL,
+  0x0533c400UL, 0x3fe078bfUL, 0x41edf5fdUL, 0x3d268122UL, 0xbe760400UL,
+  0x3fe04360UL, 0xe79539e0UL, 0xbd04c45fUL, 0xe5b20800UL, 0x3fe00e5aUL,
+  0xb1727b1cUL, 0xbd053ba3UL, 0xaf7a4800UL, 0x3fdfb358UL, 0x3c164935UL,
+  0x3d0085faUL, 0xee031800UL, 0x3fdf4aa7UL, 0x6f014a8bUL, 0x3d12cde5UL,
+  0x56b41000UL, 0x3fdee2a1UL, 0x5a470251UL, 0x3d2f27f4UL, 0xc3ddb000UL,
+  0x3fde7b42UL, 0x5372bd08UL, 0xbd246550UL, 0x1a272800UL, 0x3fde148aUL,
+  0x07322938UL, 0xbd1326b2UL, 0x484c9800UL, 0x3fddae75UL, 0x60dc616aUL,
+  0xbd1ea42dUL, 0x46def800UL, 0x3fdd4902UL, 0xe9a767a8UL, 0x3d235bafUL,
+  0x18064800UL, 0x3fdce42fUL, 0x3ec7a6b0UL, 0xbd0797c3UL, 0xc7455800UL,
+  0x3fdc7ff9UL, 0xc15249aeUL, 0xbd29b6ddUL, 0x693fa000UL, 0x3fdc1c60UL,
+  0x7fe8e180UL, 0x3d2cec80UL, 0x1b80e000UL, 0x3fdbb961UL, 0xf40a666dUL,
+  0x3d27d85bUL, 0x04462800UL, 0x3fdb56faUL, 0x2d841995UL, 0x3d109525UL,
+  0x5248d000UL, 0x3fdaf529UL, 0x52774458UL, 0xbd217cc5UL, 0x3c8ad800UL,
+  0x3fda93edUL, 0xbea77a5dUL, 0x3d1e36f2UL, 0x0224f800UL, 0x3fda3344UL,
+  0x7f9d79f5UL, 0x3d23c645UL, 0xea15f000UL, 0x3fd9d32bUL, 0x10d0c0b0UL,
+  0xbd26279eUL, 0x43135800UL, 0x3fd973a3UL, 0xa502d9f0UL, 0xbd152313UL,
+  0x635bf800UL, 0x3fd914a8UL, 0x2ee6307dUL, 0xbd1766b5UL, 0xa88b3000UL,
+  0x3fd8b639UL, 0xe5e70470UL, 0xbd205ae1UL, 0x776dc800UL, 0x3fd85855UL,
+  0x3333778aUL, 0x3d2fd56fUL, 0x3bd81800UL, 0x3fd7fafaUL, 0xc812566aUL,
+  0xbd272090UL, 0x687cf800UL, 0x3fd79e26UL, 0x2efd1778UL, 0x3d29ec7dUL,
+  0x76c67800UL, 0x3fd741d8UL, 0x49dc60b3UL, 0x3d2d8b09UL, 0xe6af1800UL,
+  0x3fd6e60eUL, 0x7c222d87UL, 0x3d172165UL, 0x3e9c6800UL, 0x3fd68ac8UL,
+  0x2756eba0UL, 0x3d20a0d3UL, 0x0b3ab000UL, 0x3fd63003UL, 0xe731ae00UL,
+  0xbd2db623UL, 0xdf596000UL, 0x3fd5d5bdUL, 0x08a465dcUL, 0xbd0a0b2aUL,
+  0x53c8d000UL, 0x3fd57bf7UL, 0xee5d40efUL, 0x3d1fadedUL, 0x0738a000UL,
+  0x3fd522aeUL, 0x8164c759UL, 0x3d2ebe70UL, 0x9e173000UL, 0x3fd4c9e0UL,
+  0x1b0ad8a4UL, 0xbd2e2089UL, 0xc271c800UL, 0x3fd4718dUL, 0x0967d675UL,
+  0xbd2f27ceUL, 0x23d5e800UL, 0x3fd419b4UL, 0xec90e09dUL, 0x3d08e436UL,
+  0x77333000UL, 0x3fd3c252UL, 0xb606bd5cUL, 0x3d183b54UL, 0x76be1000UL,
+  0x3fd36b67UL, 0xb0f177c8UL, 0x3d116ecdUL, 0xe1d36000UL, 0x3fd314f1UL,
+  0xd3213cb8UL, 0xbd28e27aUL, 0x7cdc9000UL, 0x3fd2bef0UL, 0x4a5004f4UL,
+  0x3d2a9cfaUL, 0x1134d800UL, 0x3fd26962UL, 0xdf5bb3b6UL, 0x3d2c93c1UL,
+  0x6d0eb800UL, 0x3fd21445UL, 0xba46baeaUL, 0x3d0a87deUL, 0x635a6800UL,
+  0x3fd1bf99UL, 0x5147bdb7UL, 0x3d2ca6edUL, 0xcbacf800UL, 0x3fd16b5cUL,
+  0xf7a51681UL, 0x3d2b9acdUL, 0x8227e800UL, 0x3fd1178eUL, 0x63a5f01cUL,
+  0xbd2c210eUL, 0x67616000UL, 0x3fd0c42dUL, 0x163ceae9UL, 0x3d27188bUL,
+  0x604d5800UL, 0x3fd07138UL, 0x16ed4e91UL, 0x3cf89cdbUL, 0x5626c800UL,
+  0x3fd01eaeUL, 0x1485e94aUL, 0xbd16f08cUL, 0x6cb3b000UL, 0x3fcf991cUL,
+  0xca0cdf30UL, 0x3d1bcbecUL, 0xe4dd0000UL, 0x3fcef5adUL, 0x65bb8e11UL,
+  0xbcca2115UL, 0xffe71000UL, 0x3fce530eUL, 0x6041f430UL, 0x3cc21227UL,
+  0xb0d49000UL, 0x3fcdb13dUL, 0xf715b035UL, 0xbd2aff2aUL, 0xf2656000UL,
+  0x3fcd1037UL, 0x75b6f6e4UL, 0xbd084a7eUL, 0xc6f01000UL, 0x3fcc6ffbUL,
+  0xc5962bd2UL, 0xbcf1ec72UL, 0x383be000UL, 0x3fcbd087UL, 0x595412b6UL,
+  0xbd2d4bc4UL, 0x575bd000UL, 0x3fcb31d8UL, 0x4eace1aaUL, 0xbd0c358dUL,
+  0x3c8ae000UL, 0x3fca93edUL, 0x50562169UL, 0xbd287243UL, 0x07089000UL,
+  0x3fc9f6c4UL, 0x6865817aUL, 0x3d29904dUL, 0xdcf70000UL, 0x3fc95a5aUL,
+  0x58a0ff6fUL, 0x3d07f228UL, 0xeb390000UL, 0x3fc8beafUL, 0xaae92cd1UL,
+  0xbd073d54UL, 0x6551a000UL, 0x3fc823c1UL, 0x9a631e83UL, 0x3d1e0ddbUL,
+  0x85445000UL, 0x3fc7898dUL, 0x70914305UL, 0xbd1c6610UL, 0x8b757000UL,
+  0x3fc6f012UL, 0xe59c21e1UL, 0xbd25118dUL, 0xbe8c1000UL, 0x3fc6574eUL,
+  0x2c3c2e78UL, 0x3d19cf8bUL, 0x6b544000UL, 0x3fc5bf40UL, 0xeb68981cUL,
+  0xbd127023UL, 0xe4a1b000UL, 0x3fc527e5UL, 0xe5697dc7UL, 0x3d2633e8UL,
+  0x8333b000UL, 0x3fc4913dUL, 0x54fdb678UL, 0x3d258379UL, 0xa5993000UL,
+  0x3fc3fb45UL, 0x7e6a354dUL, 0xbd2cd1d8UL, 0xb0159000UL, 0x3fc365fcUL,
+  0x234b7289UL, 0x3cc62fa8UL, 0x0c868000UL, 0x3fc2d161UL, 0xcb81b4a1UL,
+  0x3d039d6cUL, 0x2a49c000UL, 0x3fc23d71UL, 0x8fd3df5cUL, 0x3d100d23UL,
+  0x7e23f000UL, 0x3fc1aa2bUL, 0x44389934UL, 0x3d2ca78eUL, 0x8227e000UL,
+  0x3fc1178eUL, 0xce2d07f2UL, 0x3d21ef78UL, 0xb59e4000UL, 0x3fc08598UL,
+  0x7009902cUL, 0xbd27e5ddUL, 0x39dbe000UL, 0x3fbfe891UL, 0x4fa10afdUL,
+  0xbd2534d6UL, 0x830a2000UL, 0x3fbec739UL, 0xafe645e0UL, 0xbd2dc068UL,
+  0x63844000UL, 0x3fbda727UL, 0x1fa71733UL, 0x3d1a8940UL, 0x01bc4000UL,
+  0x3fbc8858UL, 0xc65aacd3UL, 0x3d2646d1UL, 0x8dad6000UL, 0x3fbb6ac8UL,
+  0x2bf768e5UL, 0xbd139080UL, 0x40b1c000UL, 0x3fba4e76UL, 0xb94407c8UL,
+  0xbd0e42b6UL, 0x5d594000UL, 0x3fb9335eUL, 0x3abd47daUL, 0x3d23115cUL,
+  0x2f40e000UL, 0x3fb8197eUL, 0xf96ffdf7UL, 0x3d0f80dcUL, 0x0aeac000UL,
+  0x3fb700d3UL, 0xa99ded32UL, 0x3cec1e8dUL, 0x4d97a000UL, 0x3fb5e95aUL,
+  0x3c5d1d1eUL, 0xbd2c6906UL, 0x5d208000UL, 0x3fb4d311UL, 0x82f4e1efUL,
+  0xbcf53a25UL, 0xa7d1e000UL, 0x3fb3bdf5UL, 0xa5db4ed7UL, 0x3d2cc85eUL,
+  0xa4472000UL, 0x3fb2aa04UL, 0xae9c697dUL, 0xbd20b6e8UL, 0xd1466000UL,
+  0x3fb1973bUL, 0x560d9e9bUL, 0xbd25325dUL, 0xb59e4000UL, 0x3fb08598UL,
+  0x7009902cUL, 0xbd17e5ddUL, 0xc006c000UL, 0x3faeea31UL, 0x4fc93b7bUL,
+  0xbd0e113eUL, 0xcdddc000UL, 0x3faccb73UL, 0x47d82807UL, 0xbd1a68f2UL,
+  0xd0fb0000UL, 0x3faaaef2UL, 0x353bb42eUL, 0x3d20fc1aUL, 0x149fc000UL,
+  0x3fa894aaUL, 0xd05a267dUL, 0xbd197995UL, 0xf2d4c000UL, 0x3fa67c94UL,
+  0xec19afa2UL, 0xbd029efbUL, 0xd42e0000UL, 0x3fa466aeUL, 0x75bdfd28UL,
+  0xbd2c1673UL, 0x2f8d0000UL, 0x3fa252f3UL, 0xe021b67bUL, 0x3d283e9aUL,
+  0x89e74000UL, 0x3fa0415dUL, 0x5cf1d753UL, 0x3d0111c0UL, 0xec148000UL,
+  0x3f9c63d2UL, 0x3f9eb2f3UL, 0x3d2578c6UL, 0x28c90000UL, 0x3f984925UL,
+  0x325a0c34UL, 0xbd2aa0baUL, 0x25980000UL, 0x3f9432a9UL, 0x928637feUL,
+  0x3d098139UL, 0x58938000UL, 0x3f902056UL, 0x06e2f7d2UL, 0xbd23dc5bUL,
+  0xa3890000UL, 0x3f882448UL, 0xda74f640UL, 0xbd275577UL, 0x75890000UL,
+  0x3f801015UL, 0x999d2be8UL, 0xbd10c76bUL, 0x59580000UL, 0x3f700805UL,
+  0xcb31c67bUL, 0x3d2166afUL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
+  0x80000000UL
+};
+
+ALIGNED_(16) juint _log2[] =
+{
+  0xfefa3800UL, 0x3fa62e42UL, 0x93c76730UL, 0x3ceef357UL
+};
+
+ALIGNED_(16) juint _coeff[] =
+{
+  0x92492492UL, 0x3fc24924UL, 0x00000000UL, 0xbfd00000UL, 0x3d6fb175UL,
+  0xbfc5555eUL, 0x55555555UL, 0x3fd55555UL, 0x9999999aUL, 0x3fc99999UL,
+  0x00000000UL, 0xbfe00000UL
+};
+
+//registers,
+// input: xmm0
+// scratch: xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7
+//          rax, rdx, rcx, r8, r11
+
+void MacroAssembler::fast_log(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ecx, Register edx, Register tmp1, Register tmp2) {
+  Label L_2TAG_PACKET_0_0_2, L_2TAG_PACKET_1_0_2, L_2TAG_PACKET_2_0_2, L_2TAG_PACKET_3_0_2;
+  Label L_2TAG_PACKET_4_0_2, L_2TAG_PACKET_5_0_2, L_2TAG_PACKET_6_0_2, L_2TAG_PACKET_7_0_2;
+  Label L_2TAG_PACKET_8_0_2;
+  Label L_2TAG_PACKET_12_0_2, L_2TAG_PACKET_13_0_2, B1_3, B1_5, start;
+
+  assert_different_registers(tmp1, tmp2, eax, ecx, edx);
+  jmp(start);
+  address L_tbl = (address)_L_tbl;
+  address log2 = (address)_log2;
+  address coeff = (address)_coeff;
+
+  bind(start);
+  subq(rsp, 24);
+  movsd(Address(rsp, 0), xmm0);
+  mov64(rax, 0x3ff0000000000000);
+  movdq(xmm2, rax);
+  mov64(rdx, 0x77f0000000000000);
+  movdq(xmm3, rdx);
+  movl(ecx, 32768);
+  movdl(xmm4, rcx);
+  mov64(tmp1, 0xffffe00000000000);
+  movdq(xmm5, tmp1);
+  movdqu(xmm1, xmm0);
+  pextrw(eax, xmm0, 3);
+  por(xmm0, xmm2);
+  movl(ecx, 16352);
+  psrlq(xmm0, 27);
+  lea(tmp2, ExternalAddress(L_tbl));
+  psrld(xmm0, 2);
+  rcpps(xmm0, xmm0);
+  psllq(xmm1, 12);
+  pshufd(xmm6, xmm5, 228);
+  psrlq(xmm1, 12);
+  subl(eax, 16);
+  cmpl(eax, 32736);
+  jcc(Assembler::aboveEqual, L_2TAG_PACKET_0_0_2);
+
+  bind(L_2TAG_PACKET_1_0_2);
+  paddd(xmm0, xmm4);
+  por(xmm1, xmm3);
+  movdl(edx, xmm0);
+  psllq(xmm0, 29);
+  pand(xmm5, xmm1);
+  pand(xmm0, xmm6);
+  subsd(xmm1, xmm5);
+  mulpd(xmm5, xmm0);
+  andl(eax, 32752);
+  subl(eax, ecx);
+  cvtsi2sdl(xmm7, eax);
+  mulsd(xmm1, xmm0);
+  movq(xmm6, ExternalAddress(log2));       // 0xfefa3800UL, 0x3fa62e42UL
+  movdqu(xmm3, ExternalAddress(coeff));    // 0x92492492UL, 0x3fc24924UL, 0x00000000UL, 0xbfd00000UL
+  subsd(xmm5, xmm2);
+  andl(edx, 16711680);
+  shrl(edx, 12);
+  movdqu(xmm0, Address(tmp2, edx));
+  movdqu(xmm4, ExternalAddress(16 + coeff)); // 0x3d6fb175UL, 0xbfc5555eUL, 0x55555555UL, 0x3fd55555UL
+  addsd(xmm1, xmm5);
+  movdqu(xmm2, ExternalAddress(32 + coeff)); // 0x9999999aUL, 0x3fc99999UL, 0x00000000UL, 0xbfe00000UL
+  mulsd(xmm6, xmm7);
+  if (VM_Version::supports_sse3()) {
+    movddup(xmm5, xmm1);
+  } else {
+    movdqu(xmm5, xmm1);
+    movlhps(xmm5, xmm5);
+  }
+  mulsd(xmm7, ExternalAddress(8 + log2));    // 0x93c76730UL, 0x3ceef357UL
+  mulsd(xmm3, xmm1);
+  addsd(xmm0, xmm6);
+  mulpd(xmm4, xmm5);
+  mulpd(xmm5, xmm5);
+  if (VM_Version::supports_sse3()) {
+    movddup(xmm6, xmm0);
+  } else {
+    movdqu(xmm6, xmm0);
+    movlhps(xmm6, xmm6);
+  }
+  addsd(xmm0, xmm1);
+  addpd(xmm4, xmm2);
+  mulpd(xmm3, xmm5);
+  subsd(xmm6, xmm0);
+  mulsd(xmm4, xmm1);
+  pshufd(xmm2, xmm0, 238);
+  addsd(xmm1, xmm6);
+  mulsd(xmm5, xmm5);
+  addsd(xmm7, xmm2);
+  addpd(xmm4, xmm3);
+  addsd(xmm1, xmm7);
+  mulpd(xmm4, xmm5);
+  addsd(xmm1, xmm4);
+  pshufd(xmm5, xmm4, 238);
+  addsd(xmm1, xmm5);
+  addsd(xmm0, xmm1);
+  jmp(B1_5);
+
+  bind(L_2TAG_PACKET_0_0_2);
+  movq(xmm0, Address(rsp, 0));
+  movq(xmm1, Address(rsp, 0));
+  addl(eax, 16);
+  cmpl(eax, 32768);
+  jcc(Assembler::aboveEqual, L_2TAG_PACKET_2_0_2);
+  cmpl(eax, 16);
+  jcc(Assembler::below, L_2TAG_PACKET_3_0_2);
+
+  bind(L_2TAG_PACKET_4_0_2);
+  addsd(xmm0, xmm0);
+  jmp(B1_5);
+
+  bind(L_2TAG_PACKET_5_0_2);
+  jcc(Assembler::above, L_2TAG_PACKET_4_0_2);
+  cmpl(edx, 0);
+  jcc(Assembler::above, L_2TAG_PACKET_4_0_2);
+  jmp(L_2TAG_PACKET_6_0_2);
+
+  bind(L_2TAG_PACKET_3_0_2);
+  xorpd(xmm1, xmm1);
+  addsd(xmm1, xmm0);
+  movdl(edx, xmm1);
+  psrlq(xmm1, 32);
+  movdl(ecx, xmm1);
+  orl(edx, ecx);
+  cmpl(edx, 0);
+  jcc(Assembler::equal, L_2TAG_PACKET_7_0_2);
+  xorpd(xmm1, xmm1);
+  movl(eax, 18416);
+  pinsrw(xmm1, eax, 3);
+  mulsd(xmm0, xmm1);
+  movdqu(xmm1, xmm0);
+  pextrw(eax, xmm0, 3);
+  por(xmm0, xmm2);
+  psrlq(xmm0, 27);
+  movl(ecx, 18416);
+  psrld(xmm0, 2);
+  rcpps(xmm0, xmm0);
+  psllq(xmm1, 12);
+  pshufd(xmm6, xmm5, 228);
+  psrlq(xmm1, 12);
+  jmp(L_2TAG_PACKET_1_0_2);
+
+  bind(L_2TAG_PACKET_2_0_2);
+  movdl(edx, xmm1);
+  psrlq(xmm1, 32);
+  movdl(ecx, xmm1);
+  addl(ecx, ecx);
+  cmpl(ecx, -2097152);
+  jcc(Assembler::aboveEqual, L_2TAG_PACKET_5_0_2);
+  orl(edx, ecx);
+  cmpl(edx, 0);
+  jcc(Assembler::equal, L_2TAG_PACKET_7_0_2);
+
+  bind(L_2TAG_PACKET_6_0_2);
+  xorpd(xmm1, xmm1);
+  xorpd(xmm0, xmm0);
+  movl(eax, 32752);
+  pinsrw(xmm1, eax, 3);
+  mulsd(xmm0, xmm1);
+  movl(Address(rsp, 16), 3);
+  jmp(L_2TAG_PACKET_8_0_2);
+  bind(L_2TAG_PACKET_7_0_2);
+  xorpd(xmm1, xmm1);
+  xorpd(xmm0, xmm0);
+  movl(eax, 49136);
+  pinsrw(xmm0, eax, 3);
+  divsd(xmm0, xmm1);
+  movl(Address(rsp, 16), 2);
+
+  bind(L_2TAG_PACKET_8_0_2);
+  movq(Address(rsp, 8), xmm0);
+
+  bind(B1_3);
+  movq(xmm0, Address(rsp, 8));
+
+  bind(B1_5);
+  addq(rsp, 24);
+}
+
+/******************************************************************************/
+//                     ALGORITHM DESCRIPTION  - POW()
+//                     ---------------------
+//
+//    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) = NaN.
+//  pow(+1,y) = NaN 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.
+//
+/******************************************************************************/
+
+ALIGNED_(16) juint _HIGHSIGMASK[] =
+{
+  0x00000000UL, 0xfffff800UL, 0x00000000UL, 0xfffff800UL
+};
+
+ALIGNED_(16) juint _LOG2_E[] =
+{
+  0x00000000UL, 0x3ff72000UL, 0x161bb241UL, 0xbf5dabe1UL
+};
+
+ALIGNED_(16) juint _HIGHMASK_Y[] =
+{
+  0x00000000UL, 0xfffffff8UL, 0x00000000UL, 0xffffffffUL
+};
+
+ALIGNED_(16) juint _T_exp[] =
+{
+  0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0x3b700000UL, 0xfa5abcbfUL,
+  0x3ff00b1aUL, 0xa7609f71UL, 0xbc84f6b2UL, 0xa9fb3335UL, 0x3ff0163dUL,
+  0x9ab8cdb7UL, 0x3c9b6129UL, 0x143b0281UL, 0x3ff02168UL, 0x0fc54eb6UL,
+  0xbc82bf31UL, 0x3e778061UL, 0x3ff02c9aUL, 0x535b085dUL, 0xbc719083UL,
+  0x2e11bbccUL, 0x3ff037d4UL, 0xeeade11aUL, 0x3c656811UL, 0xe86e7f85UL,
+  0x3ff04315UL, 0x1977c96eUL, 0xbc90a31cUL, 0x72f654b1UL, 0x3ff04e5fUL,
+  0x3aa0d08cUL, 0x3c84c379UL, 0xd3158574UL, 0x3ff059b0UL, 0xa475b465UL,
+  0x3c8d73e2UL, 0x0e3c1f89UL, 0x3ff0650aUL, 0x5799c397UL, 0xbc95cb7bUL,
+  0x29ddf6deUL, 0x3ff0706bUL, 0xe2b13c27UL, 0xbc8c91dfUL, 0x2b72a836UL,
+  0x3ff07bd4UL, 0x54458700UL, 0x3c832334UL, 0x18759bc8UL, 0x3ff08745UL,
+  0x4bb284ffUL, 0x3c6186beUL, 0xf66607e0UL, 0x3ff092bdUL, 0x800a3fd1UL,
+  0xbc968063UL, 0xcac6f383UL, 0x3ff09e3eUL, 0x18316136UL, 0x3c914878UL,
+  0x9b1f3919UL, 0x3ff0a9c7UL, 0x873d1d38UL, 0x3c85d16cUL, 0x6cf9890fUL,
+  0x3ff0b558UL, 0x4adc610bUL, 0x3c98a62eUL, 0x45e46c85UL, 0x3ff0c0f1UL,
+  0x06d21cefUL, 0x3c94f989UL, 0x2b7247f7UL, 0x3ff0cc92UL, 0x16e24f71UL,
+  0x3c901edcUL, 0x23395decUL, 0x3ff0d83bUL, 0xe43f316aUL, 0xbc9bc14dUL,
+  0x32d3d1a2UL, 0x3ff0e3ecUL, 0x27c57b52UL, 0x3c403a17UL, 0x5fdfa9c5UL,
+  0x3ff0efa5UL, 0xbc54021bUL, 0xbc949db9UL, 0xaffed31bUL, 0x3ff0fb66UL,
+  0xc44ebd7bUL, 0xbc6b9bedUL, 0x28d7233eUL, 0x3ff10730UL, 0x1692fdd5UL,
+  0x3c8d46ebUL, 0xd0125b51UL, 0x3ff11301UL, 0x39449b3aUL, 0xbc96c510UL,
+  0xab5e2ab6UL, 0x3ff11edbUL, 0xf703fb72UL, 0xbc9ca454UL, 0xc06c31ccUL,
+  0x3ff12abdUL, 0xb36ca5c7UL, 0xbc51b514UL, 0x14f204abUL, 0x3ff136a8UL,
+  0xba48dcf0UL, 0xbc67108fUL, 0xaea92de0UL, 0x3ff1429aUL, 0x9af1369eUL,
+  0xbc932fbfUL, 0x934f312eUL, 0x3ff14e95UL, 0x39bf44abUL, 0xbc8b91e8UL,
+  0xc8a58e51UL, 0x3ff15a98UL, 0xb9eeab0aUL, 0x3c82406aUL, 0x5471c3c2UL,
+  0x3ff166a4UL, 0x82ea1a32UL, 0x3c58f23bUL, 0x3c7d517bUL, 0x3ff172b8UL,
+  0xb9d78a76UL, 0xbc819041UL, 0x8695bbc0UL, 0x3ff17ed4UL, 0xe2ac5a64UL,
+  0x3c709e3fUL, 0x388c8deaUL, 0x3ff18af9UL, 0xd1970f6cUL, 0xbc911023UL,
+  0x58375d2fUL, 0x3ff19726UL, 0x85f17e08UL, 0x3c94aaddUL, 0xeb6fcb75UL,
+  0x3ff1a35bUL, 0x7b4968e4UL, 0x3c8e5b4cUL, 0xf8138a1cUL, 0x3ff1af99UL,
+  0xa4b69280UL, 0x3c97bf85UL, 0x84045cd4UL, 0x3ff1bbe0UL, 0x352ef607UL,
+  0xbc995386UL, 0x95281c6bUL, 0x3ff1c82fUL, 0x8010f8c9UL, 0x3c900977UL,
+  0x3168b9aaUL, 0x3ff1d487UL, 0x00a2643cUL, 0x3c9e016eUL, 0x5eb44027UL,
+  0x3ff1e0e7UL, 0x088cb6deUL, 0xbc96fdd8UL, 0x22fcd91dUL, 0x3ff1ed50UL,
+  0x027bb78cUL, 0xbc91df98UL, 0x8438ce4dUL, 0x3ff1f9c1UL, 0xa097af5cUL,
+  0xbc9bf524UL, 0x88628cd6UL, 0x3ff2063bUL, 0x814a8495UL, 0x3c8dc775UL,
+  0x3578a819UL, 0x3ff212beUL, 0x2cfcaac9UL, 0x3c93592dUL, 0x917ddc96UL,
+  0x3ff21f49UL, 0x9494a5eeUL, 0x3c82a97eUL, 0xa27912d1UL, 0x3ff22bddUL,
+  0x5577d69fUL, 0x3c8d34fbUL, 0x6e756238UL, 0x3ff2387aUL, 0xb6c70573UL,
+  0x3c99b07eUL, 0xfb82140aUL, 0x3ff2451fUL, 0x911ca996UL, 0x3c8acfccUL,
+  0x4fb2a63fUL, 0x3ff251ceUL, 0xbef4f4a4UL, 0x3c8ac155UL, 0x711ece75UL,
+  0x3ff25e85UL, 0x4ac31b2cUL, 0x3c93e1a2UL, 0x65e27cddUL, 0x3ff26b45UL,
+  0x9940e9d9UL, 0x3c82bd33UL, 0x341ddf29UL, 0x3ff2780eUL, 0x05f9e76cUL,
+  0x3c9e067cUL, 0xe1f56381UL, 0x3ff284dfUL, 0x8c3f0d7eUL, 0xbc9a4c3aUL,
+  0x7591bb70UL, 0x3ff291baUL, 0x28401cbdUL, 0xbc82cc72UL, 0xf51fdee1UL,
+  0x3ff29e9dUL, 0xafad1255UL, 0x3c8612e8UL, 0x66d10f13UL, 0x3ff2ab8aUL,
+  0x191690a7UL, 0xbc995743UL, 0xd0dad990UL, 0x3ff2b87fUL, 0xd6381aa4UL,
+  0xbc410adcUL, 0x39771b2fUL, 0x3ff2c57eUL, 0xa6eb5124UL, 0xbc950145UL,
+  0xa6e4030bUL, 0x3ff2d285UL, 0x54db41d5UL, 0x3c900247UL, 0x1f641589UL,
+  0x3ff2df96UL, 0xfbbce198UL, 0x3c9d16cfUL, 0xa93e2f56UL, 0x3ff2ecafUL,
+  0x45d52383UL, 0x3c71ca0fUL, 0x4abd886bUL, 0x3ff2f9d2UL, 0x532bda93UL,
+  0xbc653c55UL, 0x0a31b715UL, 0x3ff306feUL, 0xd23182e4UL, 0x3c86f46aUL,
+  0xedeeb2fdUL, 0x3ff31432UL, 0xf3f3fcd1UL, 0x3c8959a3UL, 0xfc4cd831UL,
+  0x3ff32170UL, 0x8e18047cUL, 0x3c8a9ce7UL, 0x3ba8ea32UL, 0x3ff32eb8UL,
+  0x3cb4f318UL, 0xbc9c45e8UL, 0xb26416ffUL, 0x3ff33c08UL, 0x843659a6UL,
+  0x3c932721UL, 0x66e3fa2dUL, 0x3ff34962UL, 0x930881a4UL, 0xbc835a75UL,
+  0x5f929ff1UL, 0x3ff356c5UL, 0x5c4e4628UL, 0xbc8b5ceeUL, 0xa2de883bUL,
+  0x3ff36431UL, 0xa06cb85eUL, 0xbc8c3144UL, 0x373aa9cbUL, 0x3ff371a7UL,
+  0xbf42eae2UL, 0xbc963aeaUL, 0x231e754aUL, 0x3ff37f26UL, 0x9eceb23cUL,
+  0xbc99f5caUL, 0x6d05d866UL, 0x3ff38caeUL, 0x3c9904bdUL, 0xbc9e958dUL,
+  0x1b7140efUL, 0x3ff39a40UL, 0xfc8e2934UL, 0xbc99a9a5UL, 0x34e59ff7UL,
+  0x3ff3a7dbUL, 0xd661f5e3UL, 0xbc75e436UL, 0xbfec6cf4UL, 0x3ff3b57fUL,
+  0xe26fff18UL, 0x3c954c66UL, 0xc313a8e5UL, 0x3ff3c32dUL, 0x375d29c3UL,
+  0xbc9efff8UL, 0x44ede173UL, 0x3ff3d0e5UL, 0x8c284c71UL, 0x3c7fe8d0UL,
+  0x4c123422UL, 0x3ff3dea6UL, 0x11f09ebcUL, 0x3c8ada09UL, 0xdf1c5175UL,
+  0x3ff3ec70UL, 0x7b8c9bcaUL, 0xbc8af663UL, 0x04ac801cUL, 0x3ff3fa45UL,
+  0xf956f9f3UL, 0xbc97d023UL, 0xc367a024UL, 0x3ff40822UL, 0xb6f4d048UL,
+  0x3c8bddf8UL, 0x21f72e2aUL, 0x3ff4160aUL, 0x1c309278UL, 0xbc5ef369UL,
+  0x2709468aUL, 0x3ff423fbUL, 0xc0b314ddUL, 0xbc98462dUL, 0xd950a897UL,
+  0x3ff431f5UL, 0xe35f7999UL, 0xbc81c7ddUL, 0x3f84b9d4UL, 0x3ff43ffaUL,
+  0x9704c003UL, 0x3c8880beUL, 0x6061892dUL, 0x3ff44e08UL, 0x04ef80d0UL,
+  0x3c489b7aUL, 0x42a7d232UL, 0x3ff45c20UL, 0x82fb1f8eUL, 0xbc686419UL,
+  0xed1d0057UL, 0x3ff46a41UL, 0xd1648a76UL, 0x3c9c944bUL, 0x668b3237UL,
+  0x3ff4786dUL, 0xed445733UL, 0xbc9c20f0UL, 0xb5c13cd0UL, 0x3ff486a2UL,
+  0xb69062f0UL, 0x3c73c1a3UL, 0xe192aed2UL, 0x3ff494e1UL, 0x5e499ea0UL,
+  0xbc83b289UL, 0xf0d7d3deUL, 0x3ff4a32aUL, 0xf3d1be56UL, 0x3c99cb62UL,
+  0xea6db7d7UL, 0x3ff4b17dUL, 0x7f2897f0UL, 0xbc8125b8UL, 0xd5362a27UL,
+  0x3ff4bfdaUL, 0xafec42e2UL, 0x3c7d4397UL, 0xb817c114UL, 0x3ff4ce41UL,
+  0x690abd5dUL, 0x3c905e29UL, 0x99fddd0dUL, 0x3ff4dcb2UL, 0xbc6a7833UL,
+  0x3c98ecdbUL, 0x81d8abffUL, 0x3ff4eb2dUL, 0x2e5d7a52UL, 0xbc95257dUL,
+  0x769d2ca7UL, 0x3ff4f9b2UL, 0xd25957e3UL, 0xbc94b309UL, 0x7f4531eeUL,
+  0x3ff50841UL, 0x49b7465fUL, 0x3c7a249bUL, 0xa2cf6642UL, 0x3ff516daUL,
+  0x69bd93efUL, 0xbc8f7685UL, 0xe83f4eefUL, 0x3ff5257dUL, 0x43efef71UL,
+  0xbc7c998dUL, 0x569d4f82UL, 0x3ff5342bUL, 0x1db13cadUL, 0xbc807abeUL,
+  0xf4f6ad27UL, 0x3ff542e2UL, 0x192d5f7eUL, 0x3c87926dUL, 0xca5d920fUL,
+  0x3ff551a4UL, 0xefede59bUL, 0xbc8d689cUL, 0xdde910d2UL, 0x3ff56070UL,
+  0x168eebf0UL, 0xbc90fb6eUL, 0x36b527daUL, 0x3ff56f47UL, 0x011d93adUL,
+  0x3c99bb2cUL, 0xdbe2c4cfUL, 0x3ff57e27UL, 0x8a57b9c4UL, 0xbc90b98cUL,
+  0xd497c7fdUL, 0x3ff58d12UL, 0x5b9a1de8UL, 0x3c8295e1UL, 0x27ff07ccUL,
+  0x3ff59c08UL, 0xe467e60fUL, 0xbc97e2ceUL, 0xdd485429UL, 0x3ff5ab07UL,
+  0x054647adUL, 0x3c96324cUL, 0xfba87a03UL, 0x3ff5ba11UL, 0x4c233e1aUL,
+  0xbc9b77a1UL, 0x8a5946b7UL, 0x3ff5c926UL, 0x816986a2UL, 0x3c3c4b1bUL,
+  0x90998b93UL, 0x3ff5d845UL, 0xa8b45643UL, 0xbc9cd6a7UL, 0x15ad2148UL,
+  0x3ff5e76fUL, 0x3080e65eUL, 0x3c9ba6f9UL, 0x20dceb71UL, 0x3ff5f6a3UL,
+  0xe3cdcf92UL, 0xbc89eaddUL, 0xb976dc09UL, 0x3ff605e1UL, 0x9b56de47UL,
+  0xbc93e242UL, 0xe6cdf6f4UL, 0x3ff6152aUL, 0x4ab84c27UL, 0x3c9e4b3eUL,
+  0xb03a5585UL, 0x3ff6247eUL, 0x7e40b497UL, 0xbc9383c1UL, 0x1d1929fdUL,
+  0x3ff633ddUL, 0xbeb964e5UL, 0x3c984710UL, 0x34ccc320UL, 0x3ff64346UL,
+  0x759d8933UL, 0xbc8c483cUL, 0xfebc8fb7UL, 0x3ff652b9UL, 0xc9a73e09UL,
+  0xbc9ae3d5UL, 0x82552225UL, 0x3ff66238UL, 0x87591c34UL, 0xbc9bb609UL,
+  0xc70833f6UL, 0x3ff671c1UL, 0x586c6134UL, 0xbc8e8732UL, 0xd44ca973UL,
+  0x3ff68155UL, 0x44f73e65UL, 0x3c6038aeUL, 0xb19e9538UL, 0x3ff690f4UL,
+  0x9aeb445dUL, 0x3c8804bdUL, 0x667f3bcdUL, 0x3ff6a09eUL, 0x13b26456UL,
+  0xbc9bdd34UL, 0xfa75173eUL, 0x3ff6b052UL, 0x2c9a9d0eUL, 0x3c7a38f5UL,
+  0x750bdabfUL, 0x3ff6c012UL, 0x67ff0b0dUL, 0xbc728956UL, 0xddd47645UL,
+  0x3ff6cfdcUL, 0xb6f17309UL, 0x3c9c7aa9UL, 0x3c651a2fUL, 0x3ff6dfb2UL,
+  0x683c88abUL, 0xbc6bbe3aUL, 0x98593ae5UL, 0x3ff6ef92UL, 0x9e1ac8b2UL,
+  0xbc90b974UL, 0xf9519484UL, 0x3ff6ff7dUL, 0x25860ef6UL, 0xbc883c0fUL,
+  0x66f42e87UL, 0x3ff70f74UL, 0xd45aa65fUL, 0x3c59d644UL, 0xe8ec5f74UL,
+  0x3ff71f75UL, 0x86887a99UL, 0xbc816e47UL, 0x86ead08aUL, 0x3ff72f82UL,
+  0x2cd62c72UL, 0xbc920aa0UL, 0x48a58174UL, 0x3ff73f9aUL, 0x6c65d53cUL,
+  0xbc90a8d9UL, 0x35d7cbfdUL, 0x3ff74fbdUL, 0x618a6e1cUL, 0x3c9047fdUL,
+  0x564267c9UL, 0x3ff75febUL, 0x57316dd3UL, 0xbc902459UL, 0xb1ab6e09UL,
+  0x3ff77024UL, 0x169147f8UL, 0x3c9b7877UL, 0x4fde5d3fUL, 0x3ff78069UL,
+  0x0a02162dUL, 0x3c9866b8UL, 0x38ac1cf6UL, 0x3ff790b9UL, 0x62aadd3eUL,
+  0x3c9349a8UL, 0x73eb0187UL, 0x3ff7a114UL, 0xee04992fUL, 0xbc841577UL,
+  0x0976cfdbUL, 0x3ff7b17bUL, 0x8468dc88UL, 0xbc9bebb5UL, 0x0130c132UL,
+  0x3ff7c1edUL, 0xd1164dd6UL, 0x3c9f124cUL, 0x62ff86f0UL, 0x3ff7d26aUL,
+  0xfb72b8b4UL, 0x3c91bddbUL, 0x36cf4e62UL, 0x3ff7e2f3UL, 0xba15797eUL,
+  0x3c705d02UL, 0x8491c491UL, 0x3ff7f387UL, 0xcf9311aeUL, 0xbc807f11UL,
+  0x543e1a12UL, 0x3ff80427UL, 0x626d972bUL, 0xbc927c86UL, 0xadd106d9UL,
+  0x3ff814d2UL, 0x0d151d4dUL, 0x3c946437UL, 0x994cce13UL, 0x3ff82589UL,
+  0xd41532d8UL, 0xbc9d4c1dUL, 0x1eb941f7UL, 0x3ff8364cUL, 0x31df2bd5UL,
+  0x3c999b9aUL, 0x4623c7adUL, 0x3ff8471aUL, 0xa341cdfbUL, 0xbc88d684UL,
+  0x179f5b21UL, 0x3ff857f4UL, 0xf8b216d0UL, 0xbc5ba748UL, 0x9b4492edUL,
+  0x3ff868d9UL, 0x9bd4f6baUL, 0xbc9fc6f8UL, 0xd931a436UL, 0x3ff879caUL,
+  0xd2db47bdUL, 0x3c85d2d7UL, 0xd98a6699UL, 0x3ff88ac7UL, 0xf37cb53aUL,
+  0x3c9994c2UL, 0xa478580fUL, 0x3ff89bd0UL, 0x4475202aUL, 0x3c9d5395UL,
+  0x422aa0dbUL, 0x3ff8ace5UL, 0x56864b27UL, 0x3c96e9f1UL, 0xbad61778UL,
+  0x3ff8be05UL, 0xfc43446eUL, 0x3c9ecb5eUL, 0x16b5448cUL, 0x3ff8cf32UL,
+  0x32e9e3aaUL, 0xbc70d55eUL, 0x5e0866d9UL, 0x3ff8e06aUL, 0x6fc9b2e6UL,
+  0xbc97114aUL, 0x99157736UL, 0x3ff8f1aeUL, 0xa2e3976cUL, 0x3c85cc13UL,
+  0xd0282c8aUL, 0x3ff902feUL, 0x85fe3fd2UL, 0x3c9592caUL, 0x0b91ffc6UL,
+  0x3ff9145bUL, 0x2e582524UL, 0xbc9dd679UL, 0x53aa2fe2UL, 0x3ff925c3UL,
+  0xa639db7fUL, 0xbc83455fUL, 0xb0cdc5e5UL, 0x3ff93737UL, 0x81b57ebcUL,
+  0xbc675fc7UL, 0x2b5f98e5UL, 0x3ff948b8UL, 0x797d2d99UL, 0xbc8dc3d6UL,
+  0xcbc8520fUL, 0x3ff95a44UL, 0x96a5f039UL, 0xbc764b7cUL, 0x9a7670b3UL,
+  0x3ff96bddUL, 0x7f19c896UL, 0xbc5ba596UL, 0x9fde4e50UL, 0x3ff97d82UL,
+  0x7c1b85d1UL, 0xbc9d185bUL, 0xe47a22a2UL, 0x3ff98f33UL, 0xa24c78ecUL,
+  0x3c7cabdaUL, 0x70ca07baUL, 0x3ff9a0f1UL, 0x91cee632UL, 0xbc9173bdUL,
+  0x4d53fe0dUL, 0x3ff9b2bbUL, 0x4df6d518UL, 0xbc9dd84eUL, 0x82a3f090UL,
+  0x3ff9c491UL, 0xb071f2beUL, 0x3c7c7c46UL, 0x194bb8d5UL, 0x3ff9d674UL,
+  0xa3dd8233UL, 0xbc9516beUL, 0x19e32323UL, 0x3ff9e863UL, 0x78e64c6eUL,
+  0x3c7824caUL, 0x8d07f29eUL, 0x3ff9fa5eUL, 0xaaf1faceUL, 0xbc84a9ceUL,
+  0x7b5de565UL, 0x3ffa0c66UL, 0x5d1cd533UL, 0xbc935949UL, 0xed8eb8bbUL,
+  0x3ffa1e7aUL, 0xee8be70eUL, 0x3c9c6618UL, 0xec4a2d33UL, 0x3ffa309bUL,
+  0x7ddc36abUL, 0x3c96305cUL, 0x80460ad8UL, 0x3ffa42c9UL, 0x589fb120UL,
+  0xbc9aa780UL, 0xb23e255dUL, 0x3ffa5503UL, 0xdb8d41e1UL, 0xbc9d2f6eUL,
+  0x8af46052UL, 0x3ffa674aUL, 0x30670366UL, 0x3c650f56UL, 0x1330b358UL,
+  0x3ffa799eUL, 0xcac563c7UL, 0x3c9bcb7eUL, 0x53c12e59UL, 0x3ffa8bfeUL,
+  0xb2ba15a9UL, 0xbc94f867UL, 0x5579fdbfUL, 0x3ffa9e6bUL, 0x0ef7fd31UL,
+  0x3c90fac9UL, 0x21356ebaUL, 0x3ffab0e5UL, 0xdae94545UL, 0x3c889c31UL,
+  0xbfd3f37aUL, 0x3ffac36bUL, 0xcae76cd0UL, 0xbc8f9234UL, 0x3a3c2774UL,
+  0x3ffad5ffUL, 0xb6b1b8e5UL, 0x3c97ef3bUL, 0x995ad3adUL, 0x3ffae89fUL,
+  0x345dcc81UL, 0x3c97a1cdUL, 0xe622f2ffUL, 0x3ffafb4cUL, 0x0f315ecdUL,
+  0xbc94b2fcUL, 0x298db666UL, 0x3ffb0e07UL, 0x4c80e425UL, 0xbc9bdef5UL,
+  0x6c9a8952UL, 0x3ffb20ceUL, 0x4a0756ccUL, 0x3c94dd02UL, 0xb84f15fbUL,
+  0x3ffb33a2UL, 0x3084d708UL, 0xbc62805eUL, 0x15b749b1UL, 0x3ffb4684UL,
+  0xe9df7c90UL, 0xbc7f763dUL, 0x8de5593aUL, 0x3ffb5972UL, 0xbbba6de3UL,
+  0xbc9c71dfUL, 0x29f1c52aUL, 0x3ffb6c6eUL, 0x52883f6eUL, 0x3c92a8f3UL,
+  0xf2fb5e47UL, 0x3ffb7f76UL, 0x7e54ac3bUL, 0xbc75584fUL, 0xf22749e4UL,
+  0x3ffb928cUL, 0x54cb65c6UL, 0xbc9b7216UL, 0x30a1064aUL, 0x3ffba5b0UL,
+  0x0e54292eUL, 0xbc9efcd3UL, 0xb79a6f1fUL, 0x3ffbb8e0UL, 0xc9696205UL,
+  0xbc3f52d1UL, 0x904bc1d2UL, 0x3ffbcc1eUL, 0x7a2d9e84UL, 0x3c823dd0UL,
+  0xc3f3a207UL, 0x3ffbdf69UL, 0x60ea5b53UL, 0xbc3c2623UL, 0x5bd71e09UL,
+  0x3ffbf2c2UL, 0x3f6b9c73UL, 0xbc9efdcaUL, 0x6141b33dUL, 0x3ffc0628UL,
+  0xa1fbca34UL, 0xbc8d8a5aUL, 0xdd85529cUL, 0x3ffc199bUL, 0x895048ddUL,
+  0x3c811065UL, 0xd9fa652cUL, 0x3ffc2d1cUL, 0x17c8a5d7UL, 0xbc96e516UL,
+  0x5fffd07aUL, 0x3ffc40abUL, 0xe083c60aUL, 0x3c9b4537UL, 0x78fafb22UL,
+  0x3ffc5447UL, 0x2493b5afUL, 0x3c912f07UL, 0x2e57d14bUL, 0x3ffc67f1UL,
+  0xff483cadUL, 0x3c92884dUL, 0x8988c933UL, 0x3ffc7ba8UL, 0xbe255559UL,
+  0xbc8e76bbUL, 0x9406e7b5UL, 0x3ffc8f6dUL, 0x48805c44UL, 0x3c71acbcUL,
+  0x5751c4dbUL, 0x3ffca340UL, 0xd10d08f5UL, 0xbc87f2beUL, 0xdcef9069UL,
+  0x3ffcb720UL, 0xd1e949dbUL, 0x3c7503cbUL, 0x2e6d1675UL, 0x3ffccb0fUL,
+  0x86009092UL, 0xbc7d220fUL, 0x555dc3faUL, 0x3ffcdf0bUL, 0x53829d72UL,
+  0xbc8dd83bUL, 0x5b5bab74UL, 0x3ffcf315UL, 0xb86dff57UL, 0xbc9a08e9UL,
+  0x4a07897cUL, 0x3ffd072dUL, 0x43797a9cUL, 0xbc9cbc37UL, 0x2b08c968UL,
+  0x3ffd1b53UL, 0x219a36eeUL, 0x3c955636UL, 0x080d89f2UL, 0x3ffd2f87UL,
+  0x719d8578UL, 0xbc9d487bUL, 0xeacaa1d6UL, 0x3ffd43c8UL, 0xbf5a1614UL,
+  0x3c93db53UL, 0xdcfba487UL, 0x3ffd5818UL, 0xd75b3707UL, 0x3c82ed02UL,
+  0xe862e6d3UL, 0x3ffd6c76UL, 0x4a8165a0UL, 0x3c5fe87aUL, 0x16c98398UL,
+  0x3ffd80e3UL, 0x8beddfe8UL, 0xbc911ec1UL, 0x71ff6075UL, 0x3ffd955dUL,
+  0xbb9af6beUL, 0x3c9a052dUL, 0x03db3285UL, 0x3ffda9e6UL, 0x696db532UL,
+  0x3c9c2300UL, 0xd63a8315UL, 0x3ffdbe7cUL, 0x926b8be4UL, 0xbc9b76f1UL,
+  0xf301b460UL, 0x3ffdd321UL, 0x78f018c3UL, 0x3c92da57UL, 0x641c0658UL,
+  0x3ffde7d5UL, 0x8e79ba8fUL, 0xbc9ca552UL, 0x337b9b5fUL, 0x3ffdfc97UL,
+  0x4f184b5cUL, 0xbc91a5cdUL, 0x6b197d17UL, 0x3ffe1167UL, 0xbd5c7f44UL,
+  0xbc72b529UL, 0x14f5a129UL, 0x3ffe2646UL, 0x817a1496UL, 0xbc97b627UL,
+  0x3b16ee12UL, 0x3ffe3b33UL, 0x31fdc68bUL, 0xbc99f4a4UL, 0xe78b3ff6UL,
+  0x3ffe502eUL, 0x80a9cc8fUL, 0x3c839e89UL, 0x24676d76UL, 0x3ffe6539UL,
+  0x7522b735UL, 0xbc863ff8UL, 0xfbc74c83UL, 0x3ffe7a51UL, 0xca0c8de2UL,
+  0x3c92d522UL, 0x77cdb740UL, 0x3ffe8f79UL, 0x80b054b1UL, 0xbc910894UL,
+  0xa2a490daUL, 0x3ffea4afUL, 0x179c2893UL, 0xbc9e9c23UL, 0x867cca6eUL,
+  0x3ffeb9f4UL, 0x2293e4f2UL, 0x3c94832fUL, 0x2d8e67f1UL, 0x3ffecf48UL,
+  0xb411ad8cUL, 0xbc9c93f3UL, 0xa2188510UL, 0x3ffee4aaUL, 0xa487568dUL,
+  0x3c91c68dUL, 0xee615a27UL, 0x3ffefa1bUL, 0x86a4b6b0UL, 0x3c9dc7f4UL,
+  0x1cb6412aUL, 0x3fff0f9cUL, 0x65181d45UL, 0xbc932200UL, 0x376bba97UL,
+  0x3fff252bUL, 0xbf0d8e43UL, 0x3c93a1a5UL, 0x48dd7274UL, 0x3fff3ac9UL,
+  0x3ed837deUL, 0xbc795a5aUL, 0x5b6e4540UL, 0x3fff5076UL, 0x2dd8a18bUL,
+  0x3c99d3e1UL, 0x798844f8UL, 0x3fff6632UL, 0x3539343eUL, 0x3c9fa37bUL,
+  0xad9cbe14UL, 0x3fff7bfdUL, 0xd006350aUL, 0xbc9dbb12UL, 0x02243c89UL,
+  0x3fff91d8UL, 0xa779f689UL, 0xbc612ea8UL, 0x819e90d8UL, 0x3fffa7c1UL,
+  0xf3a5931eUL, 0x3c874853UL, 0x3692d514UL, 0x3fffbdbaUL, 0x15098eb6UL,
+  0xbc796773UL, 0x2b8f71f1UL, 0x3fffd3c2UL, 0x966579e7UL, 0x3c62eb74UL,
+  0x6b2a23d9UL, 0x3fffe9d9UL, 0x7442fde3UL, 0x3c74a603UL
+};
+
+ALIGNED_(16) juint _e_coeff[] =
+{
+  0xe78a6731UL, 0x3f55d87fUL, 0xd704a0c0UL, 0x3fac6b08UL, 0x6fba4e77UL,
+  0x3f83b2abUL, 0xff82c58fUL, 0x3fcebfbdUL, 0xfefa39efUL, 0x3fe62e42UL,
+  0x00000000UL, 0x00000000UL
+};
+
+ALIGNED_(16) juint _coeff_h[] =
+{
+  0x00000000UL, 0xbfd61a00UL, 0x00000000UL, 0xbf5dabe1UL
+};
+
+ALIGNED_(16) juint _HIGHMASK_LOG_X[] =
+{
+  0xf8000000UL, 0xffffffffUL, 0x00000000UL, 0xfffff800UL
+};
+
+ALIGNED_(8) juint _HALFMASK[] =
+{
+  0xf8000000UL, 0xffffffffUL, 0xf8000000UL, 0xffffffffUL
+};
+
+ALIGNED_(16) juint _coeff_pow[] =
+{
+  0x6dc96112UL, 0xbf836578UL, 0xee241472UL, 0xbf9b0301UL, 0x9f95985aUL,
+  0xbfb528dbUL, 0xb3841d2aUL, 0xbfd619b6UL, 0x518775e3UL, 0x3f9004f2UL,
+  0xac8349bbUL, 0x3fa76c9bUL, 0x486ececcUL, 0x3fc4635eUL, 0x161bb241UL,
+  0xbf5dabe1UL, 0x9f95985aUL, 0xbfb528dbUL, 0xf8b5787dUL, 0x3ef2531eUL,
+  0x486ececbUL, 0x3fc4635eUL, 0x412055ccUL, 0xbdd61bb2UL
+};
+
+ALIGNED_(16) juint _L_tbl_pow[] =
+{
+  0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0x00000000UL, 0x20000000UL,
+  0x3feff00aUL, 0x96621f95UL, 0x3e5b1856UL, 0xe0000000UL, 0x3fefe019UL,
+  0xe5916f9eUL, 0xbe325278UL, 0x00000000UL, 0x3fefd02fUL, 0x859a1062UL,
+  0x3e595fb7UL, 0xc0000000UL, 0x3fefc049UL, 0xb245f18fUL, 0xbe529c38UL,
+  0xe0000000UL, 0x3fefb069UL, 0xad2880a7UL, 0xbe501230UL, 0x60000000UL,
+  0x3fefa08fUL, 0xc8e72420UL, 0x3e597bd1UL, 0x80000000UL, 0x3fef90baUL,
+  0xc30c4500UL, 0xbe5d6c75UL, 0xe0000000UL, 0x3fef80eaUL, 0x02c63f43UL,
+  0x3e2e1318UL, 0xc0000000UL, 0x3fef7120UL, 0xb3d4ccccUL, 0xbe44c52aUL,
+  0x00000000UL, 0x3fef615cUL, 0xdbd91397UL, 0xbe4e7d6cUL, 0xa0000000UL,
+  0x3fef519cUL, 0x65c5cd68UL, 0xbe522dc8UL, 0xa0000000UL, 0x3fef41e2UL,
+  0x46d1306cUL, 0xbe5a840eUL, 0xe0000000UL, 0x3fef322dUL, 0xd2980e94UL,
+  0x3e5071afUL, 0xa0000000UL, 0x3fef227eUL, 0x773abadeUL, 0xbe5891e5UL,
+  0xa0000000UL, 0x3fef12d4UL, 0xdc6bf46bUL, 0xbe5cccbeUL, 0xe0000000UL,
+  0x3fef032fUL, 0xbc7247faUL, 0xbe2bab83UL, 0x80000000UL, 0x3feef390UL,
+  0xbcaa1e46UL, 0xbe53bb3bUL, 0x60000000UL, 0x3feee3f6UL, 0x5f6c682dUL,
+  0xbe54c619UL, 0x80000000UL, 0x3feed461UL, 0x5141e368UL, 0xbe4b6d86UL,
+  0xe0000000UL, 0x3feec4d1UL, 0xec678f76UL, 0xbe369af6UL, 0x80000000UL,
+  0x3feeb547UL, 0x41301f55UL, 0xbe2d4312UL, 0x60000000UL, 0x3feea5c2UL,
+  0x676da6bdUL, 0xbe4d8dd0UL, 0x60000000UL, 0x3fee9642UL, 0x57a891c4UL,
+  0x3e51f991UL, 0xa0000000UL, 0x3fee86c7UL, 0xe4eb491eUL, 0x3e579bf9UL,
+  0x20000000UL, 0x3fee7752UL, 0xfddc4a2cUL, 0xbe3356e6UL, 0xc0000000UL,
+  0x3fee67e1UL, 0xd75b5bf1UL, 0xbe449531UL, 0x80000000UL, 0x3fee5876UL,
+  0xbd423b8eUL, 0x3df54fe4UL, 0x60000000UL, 0x3fee4910UL, 0x330e51b9UL,
+  0x3e54289cUL, 0x80000000UL, 0x3fee39afUL, 0x8651a95fUL, 0xbe55aad6UL,
+  0xa0000000UL, 0x3fee2a53UL, 0x5e98c708UL, 0xbe2fc4a9UL, 0xe0000000UL,
+  0x3fee1afcUL, 0x0989328dUL, 0x3e23958cUL, 0x40000000UL, 0x3fee0babUL,
+  0xee642abdUL, 0xbe425dd8UL, 0xa0000000UL, 0x3fedfc5eUL, 0xc394d236UL,
+  0x3e526362UL, 0x20000000UL, 0x3feded17UL, 0xe104aa8eUL, 0x3e4ce247UL,
+  0xc0000000UL, 0x3fedddd4UL, 0x265a9be4UL, 0xbe5bb77aUL, 0x40000000UL,
+  0x3fedce97UL, 0x0ecac52fUL, 0x3e4a7cb1UL, 0xe0000000UL, 0x3fedbf5eUL,
+  0x124cb3b8UL, 0x3e257024UL, 0x80000000UL, 0x3fedb02bUL, 0xe6d4febeUL,
+  0xbe2033eeUL, 0x20000000UL, 0x3feda0fdUL, 0x39cca00eUL, 0xbe3ddabcUL,
+  0xc0000000UL, 0x3fed91d3UL, 0xef8a552aUL, 0xbe543390UL, 0x40000000UL,
+  0x3fed82afUL, 0xb8e85204UL, 0x3e513850UL, 0xe0000000UL, 0x3fed738fUL,
+  0x3d59fe08UL, 0xbe5db728UL, 0x40000000UL, 0x3fed6475UL, 0x3aa7ead1UL,
+  0x3e58804bUL, 0xc0000000UL, 0x3fed555fUL, 0xf8a35ba9UL, 0xbe5298b0UL,
+  0x00000000UL, 0x3fed464fUL, 0x9a88dd15UL, 0x3e5a8cdbUL, 0x40000000UL,
+  0x3fed3743UL, 0xb0b0a190UL, 0x3e598635UL, 0x80000000UL, 0x3fed283cUL,
+  0xe2113295UL, 0xbe5c1119UL, 0x80000000UL, 0x3fed193aUL, 0xafbf1728UL,
+  0xbe492e9cUL, 0x60000000UL, 0x3fed0a3dUL, 0xe4a4ccf3UL, 0x3e19b90eUL,
+  0x20000000UL, 0x3fecfb45UL, 0xba3cbeb8UL, 0x3e406b50UL, 0xc0000000UL,
+  0x3fecec51UL, 0x110f7dddUL, 0x3e0d6806UL, 0x40000000UL, 0x3fecdd63UL,
+  0x7dd7d508UL, 0xbe5a8943UL, 0x80000000UL, 0x3fecce79UL, 0x9b60f271UL,
+  0xbe50676aUL, 0x80000000UL, 0x3fecbf94UL, 0x0b9ad660UL, 0x3e59174fUL,
+  0x60000000UL, 0x3fecb0b4UL, 0x00823d9cUL, 0x3e5bbf72UL, 0x20000000UL,
+  0x3feca1d9UL, 0x38a6ec89UL, 0xbe4d38f9UL, 0x80000000UL, 0x3fec9302UL,
+  0x3a0b7d8eUL, 0x3e53dbfdUL, 0xc0000000UL, 0x3fec8430UL, 0xc6826b34UL,
+  0xbe27c5c9UL, 0xc0000000UL, 0x3fec7563UL, 0x0c706381UL, 0xbe593653UL,
+  0x60000000UL, 0x3fec669bUL, 0x7df34ec7UL, 0x3e461ab5UL, 0xe0000000UL,
+  0x3fec57d7UL, 0x40e5e7e8UL, 0xbe5c3daeUL, 0x00000000UL, 0x3fec4919UL,
+  0x5602770fUL, 0xbe55219dUL, 0xc0000000UL, 0x3fec3a5eUL, 0xec7911ebUL,
+  0x3e5a5d25UL, 0x60000000UL, 0x3fec2ba9UL, 0xb39ea225UL, 0xbe53c00bUL,
+  0x80000000UL, 0x3fec1cf8UL, 0x967a212eUL, 0x3e5a8ddfUL, 0x60000000UL,
+  0x3fec0e4cUL, 0x580798bdUL, 0x3e5f53abUL, 0x00000000UL, 0x3febffa5UL,
+  0xb8282df6UL, 0xbe46b874UL, 0x20000000UL, 0x3febf102UL, 0xe33a6729UL,
+  0x3e54963fUL, 0x00000000UL, 0x3febe264UL, 0x3b53e88aUL, 0xbe3adce1UL,
+  0x60000000UL, 0x3febd3caUL, 0xc2585084UL, 0x3e5cde9fUL, 0x80000000UL,
+  0x3febc535UL, 0xa335c5eeUL, 0xbe39fd9cUL, 0x20000000UL, 0x3febb6a5UL,
+  0x7325b04dUL, 0x3e42ba15UL, 0x60000000UL, 0x3feba819UL, 0x1564540fUL,
+  0x3e3a9f35UL, 0x40000000UL, 0x3feb9992UL, 0x83fff592UL, 0xbe5465ceUL,
+  0xa0000000UL, 0x3feb8b0fUL, 0xb9da63d3UL, 0xbe4b1a0aUL, 0x80000000UL,
+  0x3feb7c91UL, 0x6d6f1ea4UL, 0x3e557657UL, 0x00000000UL, 0x3feb6e18UL,
+  0x5e80a1bfUL, 0x3e4ddbb6UL, 0x00000000UL, 0x3feb5fa3UL, 0x1c9eacb5UL,
+  0x3e592877UL, 0xa0000000UL, 0x3feb5132UL, 0x6d40beb3UL, 0xbe51858cUL,
+  0xa0000000UL, 0x3feb42c6UL, 0xd740c67bUL, 0x3e427ad2UL, 0x40000000UL,
+  0x3feb345fUL, 0xa3e0cceeUL, 0xbe5c2fc4UL, 0x40000000UL, 0x3feb25fcUL,
+  0x8e752b50UL, 0xbe3da3c2UL, 0xc0000000UL, 0x3feb179dUL, 0xa892e7deUL,
+  0x3e1fb481UL, 0xc0000000UL, 0x3feb0943UL, 0x21ed71e9UL, 0xbe365206UL,
+  0x20000000UL, 0x3feafaeeUL, 0x0e1380a3UL, 0x3e5c5b7bUL, 0x20000000UL,
+  0x3feaec9dUL, 0x3c3d640eUL, 0xbe5dbbd0UL, 0x60000000UL, 0x3feade50UL,
+  0x8f97a715UL, 0x3e3a8ec5UL, 0x20000000UL, 0x3fead008UL, 0x23ab2839UL,
+  0x3e2fe98aUL, 0x40000000UL, 0x3feac1c4UL, 0xf4bbd50fUL, 0x3e54d8f6UL,
+  0xe0000000UL, 0x3feab384UL, 0x14757c4dUL, 0xbe48774cUL, 0xc0000000UL,
+  0x3feaa549UL, 0x7c7b0eeaUL, 0x3e5b51bbUL, 0x20000000UL, 0x3fea9713UL,
+  0xf56f7013UL, 0x3e386200UL, 0xe0000000UL, 0x3fea88e0UL, 0xbe428ebeUL,
+  0xbe514af5UL, 0xe0000000UL, 0x3fea7ab2UL, 0x8d0e4496UL, 0x3e4f9165UL,
+  0x60000000UL, 0x3fea6c89UL, 0xdbacc5d5UL, 0xbe5c063bUL, 0x20000000UL,
+  0x3fea5e64UL, 0x3f19d970UL, 0xbe5a0c8cUL, 0x20000000UL, 0x3fea5043UL,
+  0x09ea3e6bUL, 0x3e5065dcUL, 0x80000000UL, 0x3fea4226UL, 0x78df246cUL,
+  0x3e5e05f6UL, 0x40000000UL, 0x3fea340eUL, 0x4057d4a0UL, 0x3e431b2bUL,
+  0x40000000UL, 0x3fea25faUL, 0x82867bb5UL, 0x3e4b76beUL, 0xa0000000UL,
+  0x3fea17eaUL, 0x9436f40aUL, 0xbe5aad39UL, 0x20000000UL, 0x3fea09dfUL,
+  0x4b5253b3UL, 0x3e46380bUL, 0x00000000UL, 0x3fe9fbd8UL, 0x8fc52466UL,
+  0xbe386f9bUL, 0x20000000UL, 0x3fe9edd5UL, 0x22d3f344UL, 0xbe538347UL,
+  0x60000000UL, 0x3fe9dfd6UL, 0x1ac33522UL, 0x3e5dbc53UL, 0x00000000UL,
+  0x3fe9d1dcUL, 0xeabdff1dUL, 0x3e40fc0cUL, 0xe0000000UL, 0x3fe9c3e5UL,
+  0xafd30e73UL, 0xbe585e63UL, 0xe0000000UL, 0x3fe9b5f3UL, 0xa52f226aUL,
+  0xbe43e8f9UL, 0x20000000UL, 0x3fe9a806UL, 0xecb8698dUL, 0xbe515b36UL,
+  0x80000000UL, 0x3fe99a1cUL, 0xf2b4e89dUL, 0x3e48b62bUL, 0x20000000UL,
+  0x3fe98c37UL, 0x7c9a88fbUL, 0x3e44414cUL, 0x00000000UL, 0x3fe97e56UL,
+  0xda015741UL, 0xbe5d13baUL, 0xe0000000UL, 0x3fe97078UL, 0x5fdace06UL,
+  0x3e51b947UL, 0x00000000UL, 0x3fe962a0UL, 0x956ca094UL, 0x3e518785UL,
+  0x40000000UL, 0x3fe954cbUL, 0x01164c1dUL, 0x3e5d5b57UL, 0xc0000000UL,
+  0x3fe946faUL, 0xe63b3767UL, 0xbe4f84e7UL, 0x40000000UL, 0x3fe9392eUL,
+  0xe57cc2a9UL, 0x3e34eda3UL, 0xe0000000UL, 0x3fe92b65UL, 0x8c75b544UL,
+  0x3e5766a0UL, 0xc0000000UL, 0x3fe91da1UL, 0x37d1d087UL, 0xbe5e2ab1UL,
+  0x80000000UL, 0x3fe90fe1UL, 0xa953dc20UL, 0x3e5fa1f3UL, 0x80000000UL,
+  0x3fe90225UL, 0xdbd3f369UL, 0x3e47d6dbUL, 0xa0000000UL, 0x3fe8f46dUL,
+  0x1c9be989UL, 0xbe5e2b0aUL, 0xa0000000UL, 0x3fe8e6b9UL, 0x3c93d76aUL,
+  0x3e5c8618UL, 0xe0000000UL, 0x3fe8d909UL, 0x2182fc9aUL, 0xbe41aa9eUL,
+  0x20000000UL, 0x3fe8cb5eUL, 0xe6b3539dUL, 0xbe530d19UL, 0x60000000UL,
+  0x3fe8bdb6UL, 0x49e58cc3UL, 0xbe3bb374UL, 0xa0000000UL, 0x3fe8b012UL,
+  0xa7cfeb8fUL, 0x3e56c412UL, 0x00000000UL, 0x3fe8a273UL, 0x8d52bc19UL,
+  0x3e1429b8UL, 0x60000000UL, 0x3fe894d7UL, 0x4dc32c6cUL, 0xbe48604cUL,
+  0xc0000000UL, 0x3fe8873fUL, 0x0c868e56UL, 0xbe564ee5UL, 0x00000000UL,
+  0x3fe879acUL, 0x56aee828UL, 0x3e5e2fd8UL, 0x60000000UL, 0x3fe86c1cUL,
+  0x7ceab8ecUL, 0x3e493365UL, 0xc0000000UL, 0x3fe85e90UL, 0x78d4dadcUL,
+  0xbe4f7f25UL, 0x00000000UL, 0x3fe85109UL, 0x0ccd8280UL, 0x3e31e7a2UL,
+  0x40000000UL, 0x3fe84385UL, 0x34ba4e15UL, 0x3e328077UL, 0x80000000UL,
+  0x3fe83605UL, 0xa670975aUL, 0xbe53eee5UL, 0xa0000000UL, 0x3fe82889UL,
+  0xf61b77b2UL, 0xbe43a20aUL, 0xa0000000UL, 0x3fe81b11UL, 0x13e6643bUL,
+  0x3e5e5fe5UL, 0xc0000000UL, 0x3fe80d9dUL, 0x82cc94e8UL, 0xbe5ff1f9UL,
+  0xa0000000UL, 0x3fe8002dUL, 0x8a0c9c5dUL, 0xbe42b0e7UL, 0x60000000UL,
+  0x3fe7f2c1UL, 0x22a16f01UL, 0x3e5d9ea0UL, 0x20000000UL, 0x3fe7e559UL,
+  0xc38cd451UL, 0x3e506963UL, 0xc0000000UL, 0x3fe7d7f4UL, 0x9902bc71UL,
+  0x3e4503d7UL, 0x40000000UL, 0x3fe7ca94UL, 0xdef2a3c0UL, 0x3e3d98edUL,
+  0xa0000000UL, 0x3fe7bd37UL, 0xed49abb0UL, 0x3e24c1ffUL, 0xe0000000UL,
+  0x3fe7afdeUL, 0xe3b0be70UL, 0xbe40c467UL, 0x00000000UL, 0x3fe7a28aUL,
+  0xaf9f193cUL, 0xbe5dff6cUL, 0xe0000000UL, 0x3fe79538UL, 0xb74cf6b6UL,
+  0xbe258ed0UL, 0xa0000000UL, 0x3fe787ebUL, 0x1d9127c7UL, 0x3e345fb0UL,
+  0x40000000UL, 0x3fe77aa2UL, 0x1028c21dUL, 0xbe4619bdUL, 0xa0000000UL,
+  0x3fe76d5cUL, 0x7cb0b5e4UL, 0x3e40f1a2UL, 0xe0000000UL, 0x3fe7601aUL,
+  0x2b1bc4adUL, 0xbe32e8bbUL, 0xe0000000UL, 0x3fe752dcUL, 0x6839f64eUL,
+  0x3e41f57bUL, 0xc0000000UL, 0x3fe745a2UL, 0xc4121f7eUL, 0xbe52c40aUL,
+  0x60000000UL, 0x3fe7386cUL, 0xd6852d72UL, 0xbe5c4e6bUL, 0xc0000000UL,
+  0x3fe72b39UL, 0x91d690f7UL, 0xbe57f88fUL, 0xe0000000UL, 0x3fe71e0aUL,
+  0x627a2159UL, 0xbe4425d5UL, 0xc0000000UL, 0x3fe710dfUL, 0x50a54033UL,
+  0x3e422b7eUL, 0x60000000UL, 0x3fe703b8UL, 0x3b0b5f91UL, 0x3e5d3857UL,
+  0xe0000000UL, 0x3fe6f694UL, 0x84d628a2UL, 0xbe51f090UL, 0x00000000UL,
+  0x3fe6e975UL, 0x306d8894UL, 0xbe414d83UL, 0xe0000000UL, 0x3fe6dc58UL,
+  0x30bf24aaUL, 0xbe4650caUL, 0x80000000UL, 0x3fe6cf40UL, 0xd4628d69UL,
+  0xbe5db007UL, 0xc0000000UL, 0x3fe6c22bUL, 0xa2aae57bUL, 0xbe31d279UL,
+  0xc0000000UL, 0x3fe6b51aUL, 0x860edf7eUL, 0xbe2d4c4aUL, 0x80000000UL,
+  0x3fe6a80dUL, 0xf3559341UL, 0xbe5f7e98UL, 0xe0000000UL, 0x3fe69b03UL,
+  0xa885899eUL, 0xbe5c2011UL, 0xe0000000UL, 0x3fe68dfdUL, 0x2bdc6d37UL,
+  0x3e224a82UL, 0xa0000000UL, 0x3fe680fbUL, 0xc12ad1b9UL, 0xbe40cf56UL,
+  0x00000000UL, 0x3fe673fdUL, 0x1bcdf659UL, 0xbdf52f2dUL, 0x00000000UL,
+  0x3fe66702UL, 0x5df10408UL, 0x3e5663e0UL, 0xc0000000UL, 0x3fe65a0aUL,
+  0xa4070568UL, 0xbe40b12fUL, 0x00000000UL, 0x3fe64d17UL, 0x71c54c47UL,
+  0x3e5f5e8bUL, 0x00000000UL, 0x3fe64027UL, 0xbd4b7e83UL, 0x3e42ead6UL,
+  0xa0000000UL, 0x3fe6333aUL, 0x61598bd2UL, 0xbe4c48d4UL, 0xc0000000UL,
+  0x3fe62651UL, 0x6f538d61UL, 0x3e548401UL, 0xa0000000UL, 0x3fe6196cUL,
+  0x14344120UL, 0xbe529af6UL, 0x00000000UL, 0x3fe60c8bUL, 0x5982c587UL,
+  0xbe3e1e4fUL, 0x00000000UL, 0x3fe5ffadUL, 0xfe51d4eaUL, 0xbe4c897aUL,
+  0x80000000UL, 0x3fe5f2d2UL, 0xfd46ebe1UL, 0x3e552e00UL, 0xa0000000UL,
+  0x3fe5e5fbUL, 0xa4695699UL, 0x3e5ed471UL, 0x60000000UL, 0x3fe5d928UL,
+  0x80d118aeUL, 0x3e456b61UL, 0xa0000000UL, 0x3fe5cc58UL, 0x304c330bUL,
+  0x3e54dc29UL, 0x80000000UL, 0x3fe5bf8cUL, 0x0af2dedfUL, 0xbe3aa9bdUL,
+  0xe0000000UL, 0x3fe5b2c3UL, 0x15fc9258UL, 0xbe479a37UL, 0xc0000000UL,
+  0x3fe5a5feUL, 0x9292c7eaUL, 0x3e188650UL, 0x20000000UL, 0x3fe5993dUL,
+  0x33b4d380UL, 0x3e5d6d93UL, 0x20000000UL, 0x3fe58c7fUL, 0x02fd16c7UL,
+  0x3e2fe961UL, 0xa0000000UL, 0x3fe57fc4UL, 0x4a05edb6UL, 0xbe4d55b4UL,
+  0xa0000000UL, 0x3fe5730dUL, 0x3d443abbUL, 0xbe5e6954UL, 0x00000000UL,
+  0x3fe5665aUL, 0x024acfeaUL, 0x3e50e61bUL, 0x00000000UL, 0x3fe559aaUL,
+  0xcc9edd09UL, 0xbe325403UL, 0x60000000UL, 0x3fe54cfdUL, 0x1fe26950UL,
+  0x3e5d500eUL, 0x60000000UL, 0x3fe54054UL, 0x6c5ae164UL, 0xbe4a79b4UL,
+  0xc0000000UL, 0x3fe533aeUL, 0x154b0287UL, 0xbe401571UL, 0xa0000000UL,
+  0x3fe5270cUL, 0x0673f401UL, 0xbe56e56bUL, 0xe0000000UL, 0x3fe51a6dUL,
+  0x751b639cUL, 0x3e235269UL, 0xa0000000UL, 0x3fe50dd2UL, 0x7c7b2bedUL,
+  0x3ddec887UL, 0xc0000000UL, 0x3fe5013aUL, 0xafab4e17UL, 0x3e5e7575UL,
+  0x60000000UL, 0x3fe4f4a6UL, 0x2e308668UL, 0x3e59aed6UL, 0x80000000UL,
+  0x3fe4e815UL, 0xf33e2a76UL, 0xbe51f184UL, 0xe0000000UL, 0x3fe4db87UL,
+  0x839f3e3eUL, 0x3e57db01UL, 0xc0000000UL, 0x3fe4cefdUL, 0xa9eda7bbUL,
+  0x3e535e0fUL, 0x00000000UL, 0x3fe4c277UL, 0x2a8f66a5UL, 0x3e5ce451UL,
+  0xc0000000UL, 0x3fe4b5f3UL, 0x05192456UL, 0xbe4e8518UL, 0xc0000000UL,
+  0x3fe4a973UL, 0x4aa7cd1dUL, 0x3e46784aUL, 0x40000000UL, 0x3fe49cf7UL,
+  0x8e23025eUL, 0xbe5749f2UL, 0x00000000UL, 0x3fe4907eUL, 0x18d30215UL,
+  0x3e360f39UL, 0x20000000UL, 0x3fe48408UL, 0x63dcf2f3UL, 0x3e5e00feUL,
+  0xc0000000UL, 0x3fe47795UL, 0x46182d09UL, 0xbe5173d9UL, 0xa0000000UL,
+  0x3fe46b26UL, 0x8f0e62aaUL, 0xbe48f281UL, 0xe0000000UL, 0x3fe45ebaUL,
+  0x5775c40cUL, 0xbe56aad4UL, 0x60000000UL, 0x3fe45252UL, 0x0fe25f69UL,
+  0x3e48bd71UL, 0x40000000UL, 0x3fe445edUL, 0xe9989ec5UL, 0x3e590d97UL,
+  0x80000000UL, 0x3fe4398bUL, 0xb3d9ffe3UL, 0x3e479dbcUL, 0x20000000UL,
+  0x3fe42d2dUL, 0x388e4d2eUL, 0xbe5eed80UL, 0xe0000000UL, 0x3fe420d1UL,
+  0x6f797c18UL, 0x3e554b4cUL, 0x20000000UL, 0x3fe4147aUL, 0x31048bb4UL,
+  0xbe5b1112UL, 0x80000000UL, 0x3fe40825UL, 0x2efba4f9UL, 0x3e48ebc7UL,
+  0x40000000UL, 0x3fe3fbd4UL, 0x50201119UL, 0x3e40b701UL, 0x40000000UL,
+  0x3fe3ef86UL, 0x0a4db32cUL, 0x3e551de8UL, 0xa0000000UL, 0x3fe3e33bUL,
+  0x0c9c148bUL, 0xbe50c1f6UL, 0x20000000UL, 0x3fe3d6f4UL, 0xc9129447UL,
+  0x3e533fa0UL, 0x00000000UL, 0x3fe3cab0UL, 0xaae5b5a0UL, 0xbe22b68eUL,
+  0x20000000UL, 0x3fe3be6fUL, 0x02305e8aUL, 0xbe54fc08UL, 0x60000000UL,
+  0x3fe3b231UL, 0x7f908258UL, 0x3e57dc05UL, 0x00000000UL, 0x3fe3a5f7UL,
+  0x1a09af78UL, 0x3e08038bUL, 0xe0000000UL, 0x3fe399bfUL, 0x490643c1UL,
+  0xbe5dbe42UL, 0xe0000000UL, 0x3fe38d8bUL, 0x5e8ad724UL, 0xbe3c2b72UL,
+  0x20000000UL, 0x3fe3815bUL, 0xc67196b6UL, 0x3e1713cfUL, 0xa0000000UL,
+  0x3fe3752dUL, 0x6182e429UL, 0xbe3ec14cUL, 0x40000000UL, 0x3fe36903UL,
+  0xab6eb1aeUL, 0x3e5a2cc5UL, 0x40000000UL, 0x3fe35cdcUL, 0xfe5dc064UL,
+  0xbe5c5878UL, 0x40000000UL, 0x3fe350b8UL, 0x0ba6b9e4UL, 0x3e51619bUL,
+  0x80000000UL, 0x3fe34497UL, 0x857761aaUL, 0x3e5fff53UL, 0x00000000UL,
+  0x3fe3387aUL, 0xf872d68cUL, 0x3e484f4dUL, 0xa0000000UL, 0x3fe32c5fUL,
+  0x087e97c2UL, 0x3e52842eUL, 0x80000000UL, 0x3fe32048UL, 0x73d6d0c0UL,
+  0xbe503edfUL, 0x80000000UL, 0x3fe31434UL, 0x0c1456a1UL, 0xbe5f72adUL,
+  0xa0000000UL, 0x3fe30823UL, 0x83a1a4d5UL, 0xbe5e65ccUL, 0xe0000000UL,
+  0x3fe2fc15UL, 0x855a7390UL, 0xbe506438UL, 0x40000000UL, 0x3fe2f00bUL,
+  0xa2898287UL, 0x3e3d22a2UL, 0xe0000000UL, 0x3fe2e403UL, 0x8b56f66fUL,
+  0xbe5aa5fdUL, 0x80000000UL, 0x3fe2d7ffUL, 0x52db119aUL, 0x3e3a2e3dUL,
+  0x60000000UL, 0x3fe2cbfeUL, 0xe2ddd4c0UL, 0xbe586469UL, 0x40000000UL,
+  0x3fe2c000UL, 0x6b01bf10UL, 0x3e352b9dUL, 0x40000000UL, 0x3fe2b405UL,
+  0xb07a1cdfUL, 0x3e5c5cdaUL, 0x80000000UL, 0x3fe2a80dUL, 0xc7b5f868UL,
+  0xbe5668b3UL, 0xc0000000UL, 0x3fe29c18UL, 0x185edf62UL, 0xbe563d66UL,
+  0x00000000UL, 0x3fe29027UL, 0xf729e1ccUL, 0x3e59a9a0UL, 0x80000000UL,
+  0x3fe28438UL, 0x6433c727UL, 0xbe43cc89UL, 0x00000000UL, 0x3fe2784dUL,
+  0x41782631UL, 0xbe30750cUL, 0xa0000000UL, 0x3fe26c64UL, 0x914911b7UL,
+  0xbe58290eUL, 0x40000000UL, 0x3fe2607fUL, 0x3dcc73e1UL, 0xbe4269cdUL,
+  0x00000000UL, 0x3fe2549dUL, 0x2751bf70UL, 0xbe5a6998UL, 0xc0000000UL,
+  0x3fe248bdUL, 0x4248b9fbUL, 0xbe4ddb00UL, 0x80000000UL, 0x3fe23ce1UL,
+  0xf35cf82fUL, 0x3e561b71UL, 0x60000000UL, 0x3fe23108UL, 0x8e481a2dUL,
+  0x3e518fb9UL, 0x60000000UL, 0x3fe22532UL, 0x5ab96edcUL, 0xbe5fafc5UL,
+  0x40000000UL, 0x3fe2195fUL, 0x80943911UL, 0xbe07f819UL, 0x40000000UL,
+  0x3fe20d8fUL, 0x386f2d6cUL, 0xbe54ba8bUL, 0x40000000UL, 0x3fe201c2UL,
+  0xf29664acUL, 0xbe5eb815UL, 0x20000000UL, 0x3fe1f5f8UL, 0x64f03390UL,
+  0x3e5e320cUL, 0x20000000UL, 0x3fe1ea31UL, 0x747ff696UL, 0x3e5ef0a5UL,
+  0x40000000UL, 0x3fe1de6dUL, 0x3e9ceb51UL, 0xbe5f8d27UL, 0x20000000UL,
+  0x3fe1d2acUL, 0x4ae0b55eUL, 0x3e5faa21UL, 0x20000000UL, 0x3fe1c6eeUL,
+  0x28569a5eUL, 0x3e598a4fUL, 0x20000000UL, 0x3fe1bb33UL, 0x54b33e07UL,
+  0x3e46130aUL, 0x20000000UL, 0x3fe1af7bUL, 0x024f1078UL, 0xbe4dbf93UL,
+  0x00000000UL, 0x3fe1a3c6UL, 0xb0783bfaUL, 0x3e419248UL, 0xe0000000UL,
+  0x3fe19813UL, 0x2f02b836UL, 0x3e4e02b7UL, 0xc0000000UL, 0x3fe18c64UL,
+  0x28dec9d4UL, 0x3e09064fUL, 0x80000000UL, 0x3fe180b8UL, 0x45cbf406UL,
+  0x3e5b1f46UL, 0x40000000UL, 0x3fe1750fUL, 0x03d9964cUL, 0x3e5b0a79UL,
+  0x00000000UL, 0x3fe16969UL, 0x8b5b882bUL, 0xbe238086UL, 0xa0000000UL,
+  0x3fe15dc5UL, 0x73bad6f8UL, 0xbdf1fca4UL, 0x20000000UL, 0x3fe15225UL,
+  0x5385769cUL, 0x3e5e8d76UL, 0xa0000000UL, 0x3fe14687UL, 0x1676dc6bUL,
+  0x3e571d08UL, 0x20000000UL, 0x3fe13aedUL, 0xa8c41c7fUL, 0xbe598a25UL,
+  0x60000000UL, 0x3fe12f55UL, 0xc4e1aaf0UL, 0x3e435277UL, 0xa0000000UL,
+  0x3fe123c0UL, 0x403638e1UL, 0xbe21aa7cUL, 0xc0000000UL, 0x3fe1182eUL,
+  0x557a092bUL, 0xbdd0116bUL, 0xc0000000UL, 0x3fe10c9fUL, 0x7d779f66UL,
+  0x3e4a61baUL, 0xc0000000UL, 0x3fe10113UL, 0x2b09c645UL, 0xbe5d586eUL,
+  0x20000000UL, 0x3fe0ea04UL, 0xea2cad46UL, 0x3e5aa97cUL, 0x20000000UL,
+  0x3fe0d300UL, 0x23190e54UL, 0x3e50f1a7UL, 0xa0000000UL, 0x3fe0bc07UL,
+  0x1379a5a6UL, 0xbe51619dUL, 0x60000000UL, 0x3fe0a51aUL, 0x926a3d4aUL,
+  0x3e5cf019UL, 0xa0000000UL, 0x3fe08e38UL, 0xa8c24358UL, 0x3e35241eUL,
+  0x20000000UL, 0x3fe07762UL, 0x24317e7aUL, 0x3e512cfaUL, 0x00000000UL,
+  0x3fe06097UL, 0xfd9cf274UL, 0xbe55bef3UL, 0x00000000UL, 0x3fe049d7UL,
+  0x3689b49dUL, 0xbe36d26dUL, 0x40000000UL, 0x3fe03322UL, 0xf72ef6c4UL,
+  0xbe54cd08UL, 0xa0000000UL, 0x3fe01c78UL, 0x23702d2dUL, 0xbe5900bfUL,
+  0x00000000UL, 0x3fe005daUL, 0x3f59c14cUL, 0x3e57d80bUL, 0x40000000UL,
+  0x3fdfde8dUL, 0xad67766dUL, 0xbe57fad4UL, 0x40000000UL, 0x3fdfb17cUL,
+  0x644f4ae7UL, 0x3e1ee43bUL, 0x40000000UL, 0x3fdf8481UL, 0x903234d2UL,
+  0x3e501a86UL, 0x40000000UL, 0x3fdf579cUL, 0xafe9e509UL, 0xbe267c3eUL,
+  0x00000000UL, 0x3fdf2acdUL, 0xb7dfda0bUL, 0xbe48149bUL, 0x40000000UL,
+  0x3fdefe13UL, 0x3b94305eUL, 0x3e5f4ea7UL, 0x80000000UL, 0x3fded16fUL,
+  0x5d95da61UL, 0xbe55c198UL, 0x00000000UL, 0x3fdea4e1UL, 0x406960c9UL,
+  0xbdd99a19UL, 0x00000000UL, 0x3fde7868UL, 0xd22f3539UL, 0x3e470c78UL,
+  0x80000000UL, 0x3fde4c04UL, 0x83eec535UL, 0xbe3e1232UL, 0x40000000UL,
+  0x3fde1fb6UL, 0x3dfbffcbUL, 0xbe4b7d71UL, 0x40000000UL, 0x3fddf37dUL,
+  0x7e1be4e0UL, 0xbe5b8f8fUL, 0x40000000UL, 0x3fddc759UL, 0x46dae887UL,
+  0xbe350458UL, 0x80000000UL, 0x3fdd9b4aUL, 0xed6ecc49UL, 0xbe5f0045UL,
+  0x80000000UL, 0x3fdd6f50UL, 0x2e9e883cUL, 0x3e2915daUL, 0x80000000UL,
+  0x3fdd436bUL, 0xf0bccb32UL, 0x3e4a68c9UL, 0x80000000UL, 0x3fdd179bUL,
+  0x9bbfc779UL, 0xbe54a26aUL, 0x00000000UL, 0x3fdcebe0UL, 0x7cea33abUL,
+  0x3e43c6b7UL, 0x40000000UL, 0x3fdcc039UL, 0xe740fd06UL, 0x3e5526c2UL,
+  0x40000000UL, 0x3fdc94a7UL, 0x9eadeb1aUL, 0xbe396d8dUL, 0xc0000000UL,
+  0x3fdc6929UL, 0xf0a8f95aUL, 0xbe5c0ab2UL, 0x80000000UL, 0x3fdc3dc0UL,
+  0x6ee2693bUL, 0x3e0992e6UL, 0xc0000000UL, 0x3fdc126bUL, 0x5ac6b581UL,
+  0xbe2834b6UL, 0x40000000UL, 0x3fdbe72bUL, 0x8cc226ffUL, 0x3e3596a6UL,
+  0x00000000UL, 0x3fdbbbffUL, 0xf92a74bbUL, 0x3e3c5813UL, 0x00000000UL,
+  0x3fdb90e7UL, 0x479664c0UL, 0xbe50d644UL, 0x00000000UL, 0x3fdb65e3UL,
+  0x5004975bUL, 0xbe55258fUL, 0x00000000UL, 0x3fdb3af3UL, 0xe4b23194UL,
+  0xbe588407UL, 0xc0000000UL, 0x3fdb1016UL, 0xe65d4d0aUL, 0x3e527c26UL,
+  0x80000000UL, 0x3fdae54eUL, 0x814fddd6UL, 0x3e5962a2UL, 0x40000000UL,
+  0x3fdaba9aUL, 0xe19d0913UL, 0xbe562f4eUL, 0x80000000UL, 0x3fda8ff9UL,
+  0x43cfd006UL, 0xbe4cfdebUL, 0x40000000UL, 0x3fda656cUL, 0x686f0a4eUL,
+  0x3e5e47a8UL, 0xc0000000UL, 0x3fda3af2UL, 0x7200d410UL, 0x3e5e1199UL,
+  0xc0000000UL, 0x3fda108cUL, 0xabd2266eUL, 0x3e5ee4d1UL, 0x40000000UL,
+  0x3fd9e63aUL, 0x396f8f2cUL, 0x3e4dbffbUL, 0x00000000UL, 0x3fd9bbfbUL,
+  0xe32b25ddUL, 0x3e5c3a54UL, 0x40000000UL, 0x3fd991cfUL, 0x431e4035UL,
+  0xbe457925UL, 0x80000000UL, 0x3fd967b6UL, 0x7bed3dd3UL, 0x3e40c61dUL,
+  0x00000000UL, 0x3fd93db1UL, 0xd7449365UL, 0x3e306419UL, 0x80000000UL,
+  0x3fd913beUL, 0x1746e791UL, 0x3e56fcfcUL, 0x40000000UL, 0x3fd8e9dfUL,
+  0xf3a9028bUL, 0xbe5041b9UL, 0xc0000000UL, 0x3fd8c012UL, 0x56840c50UL,
+  0xbe26e20aUL, 0x40000000UL, 0x3fd89659UL, 0x19763102UL, 0xbe51f466UL,
+  0x80000000UL, 0x3fd86cb2UL, 0x7032de7cUL, 0xbe4d298aUL, 0x80000000UL,
+  0x3fd8431eUL, 0xdeb39fabUL, 0xbe4361ebUL, 0x40000000UL, 0x3fd8199dUL,
+  0x5d01cbe0UL, 0xbe5425b3UL, 0x80000000UL, 0x3fd7f02eUL, 0x3ce99aa9UL,
+  0x3e146fa8UL, 0x80000000UL, 0x3fd7c6d2UL, 0xd1a262b9UL, 0xbe5a1a69UL,
+  0xc0000000UL, 0x3fd79d88UL, 0x8606c236UL, 0x3e423a08UL, 0x80000000UL,
+  0x3fd77451UL, 0x8fd1e1b7UL, 0x3e5a6a63UL, 0xc0000000UL, 0x3fd74b2cUL,
+  0xe491456aUL, 0x3e42c1caUL, 0x40000000UL, 0x3fd7221aUL, 0x4499a6d7UL,
+  0x3e36a69aUL, 0x00000000UL, 0x3fd6f91aUL, 0x5237df94UL, 0xbe0f8f02UL,
+  0x00000000UL, 0x3fd6d02cUL, 0xb6482c6eUL, 0xbe5abcf7UL, 0x00000000UL,
+  0x3fd6a750UL, 0x1919fd61UL, 0xbe57ade2UL, 0x00000000UL, 0x3fd67e86UL,
+  0xaa7a994dUL, 0xbe3f3fbdUL, 0x00000000UL, 0x3fd655ceUL, 0x67db014cUL,
+  0x3e33c550UL, 0x00000000UL, 0x3fd62d28UL, 0xa82856b7UL, 0xbe1409d1UL,
+  0xc0000000UL, 0x3fd60493UL, 0x1e6a300dUL, 0x3e55d899UL, 0x80000000UL,
+  0x3fd5dc11UL, 0x1222bd5cUL, 0xbe35bfc0UL, 0xc0000000UL, 0x3fd5b3a0UL,
+  0x6e8dc2d3UL, 0x3e5d4d79UL, 0x00000000UL, 0x3fd58b42UL, 0xe0e4ace6UL,
+  0xbe517303UL, 0x80000000UL, 0x3fd562f4UL, 0xb306e0a8UL, 0x3e5edf0fUL,
+  0xc0000000UL, 0x3fd53ab8UL, 0x6574bc54UL, 0x3e5ee859UL, 0x80000000UL,
+  0x3fd5128eUL, 0xea902207UL, 0x3e5f6188UL, 0xc0000000UL, 0x3fd4ea75UL,
+  0x9f911d79UL, 0x3e511735UL, 0x80000000UL, 0x3fd4c26eUL, 0xf9c77397UL,
+  0xbe5b1643UL, 0x40000000UL, 0x3fd49a78UL, 0x15fc9258UL, 0x3e479a37UL,
+  0x80000000UL, 0x3fd47293UL, 0xd5a04dd9UL, 0xbe426e56UL, 0xc0000000UL,
+  0x3fd44abfUL, 0xe04042f5UL, 0x3e56f7c6UL, 0x40000000UL, 0x3fd422fdUL,
+  0x1d8bf2c8UL, 0x3e5d8810UL, 0x00000000UL, 0x3fd3fb4cUL, 0x88a8ddeeUL,
+  0xbe311454UL, 0xc0000000UL, 0x3fd3d3abUL, 0x3e3b5e47UL, 0xbe5d1b72UL,
+  0x40000000UL, 0x3fd3ac1cUL, 0xc2ab5d59UL, 0x3e31b02bUL, 0xc0000000UL,
+  0x3fd3849dUL, 0xd4e34b9eUL, 0x3e51cb2fUL, 0x40000000UL, 0x3fd35d30UL,
+  0x177204fbUL, 0xbe2b8cd7UL, 0x80000000UL, 0x3fd335d3UL, 0xfcd38c82UL,
+  0xbe4356e1UL, 0x80000000UL, 0x3fd30e87UL, 0x64f54accUL, 0xbe4e6224UL,
+  0x00000000UL, 0x3fd2e74cUL, 0xaa7975d9UL, 0x3e5dc0feUL, 0x80000000UL,
+  0x3fd2c021UL, 0x516dab3fUL, 0xbe50ffa3UL, 0x40000000UL, 0x3fd29907UL,
+  0x2bfb7313UL, 0x3e5674a2UL, 0xc0000000UL, 0x3fd271fdUL, 0x0549fc99UL,
+  0x3e385d29UL, 0xc0000000UL, 0x3fd24b04UL, 0x55b63073UL, 0xbe500c6dUL,
+  0x00000000UL, 0x3fd2241cUL, 0x3f91953aUL, 0x3e389977UL, 0xc0000000UL,
+  0x3fd1fd43UL, 0xa1543f71UL, 0xbe3487abUL, 0xc0000000UL, 0x3fd1d67bUL,
+  0x4ec8867cUL, 0x3df6a2dcUL, 0x00000000UL, 0x3fd1afc4UL, 0x4328e3bbUL,
+  0x3e41d9c0UL, 0x80000000UL, 0x3fd1891cUL, 0x2e1cda84UL, 0x3e3bdd87UL,
+  0x40000000UL, 0x3fd16285UL, 0x4b5331aeUL, 0xbe53128eUL, 0x00000000UL,
+  0x3fd13bfeUL, 0xb9aec164UL, 0xbe52ac98UL, 0xc0000000UL, 0x3fd11586UL,
+  0xd91e1316UL, 0xbe350630UL, 0x80000000UL, 0x3fd0ef1fUL, 0x7cacc12cUL,
+  0x3e3f5219UL, 0x40000000UL, 0x3fd0c8c8UL, 0xbce277b7UL, 0x3e3d30c0UL,
+  0x00000000UL, 0x3fd0a281UL, 0x2a63447dUL, 0xbe541377UL, 0x80000000UL,
+  0x3fd07c49UL, 0xfac483b5UL, 0xbe5772ecUL, 0xc0000000UL, 0x3fd05621UL,
+  0x36b8a570UL, 0xbe4fd4bdUL, 0xc0000000UL, 0x3fd03009UL, 0xbae505f7UL,
+  0xbe450388UL, 0x80000000UL, 0x3fd00a01UL, 0x3e35aeadUL, 0xbe5430fcUL,
+  0x80000000UL, 0x3fcfc811UL, 0x707475acUL, 0x3e38806eUL, 0x80000000UL,
+  0x3fcf7c3fUL, 0xc91817fcUL, 0xbe40cceaUL, 0x80000000UL, 0x3fcf308cUL,
+  0xae05d5e9UL, 0xbe4919b8UL, 0x80000000UL, 0x3fcee4f8UL, 0xae6cc9e6UL,
+  0xbe530b94UL, 0x00000000UL, 0x3fce9983UL, 0x1efe3e8eUL, 0x3e57747eUL,
+  0x00000000UL, 0x3fce4e2dUL, 0xda78d9bfUL, 0xbe59a608UL, 0x00000000UL,
+  0x3fce02f5UL, 0x8abe2c2eUL, 0x3e4a35adUL, 0x00000000UL, 0x3fcdb7dcUL,
+  0x1495450dUL, 0xbe0872ccUL, 0x80000000UL, 0x3fcd6ce1UL, 0x86ee0ba0UL,
+  0xbe4f59a0UL, 0x00000000UL, 0x3fcd2205UL, 0xe81ca888UL, 0x3e5402c3UL,
+  0x00000000UL, 0x3fccd747UL, 0x3b4424b9UL, 0x3e5dfdc3UL, 0x80000000UL,
+  0x3fcc8ca7UL, 0xd305b56cUL, 0x3e202da6UL, 0x00000000UL, 0x3fcc4226UL,
+  0x399a6910UL, 0xbe482a1cUL, 0x80000000UL, 0x3fcbf7c2UL, 0x747f7938UL,
+  0xbe587372UL, 0x80000000UL, 0x3fcbad7cUL, 0x6fc246a0UL, 0x3e50d83dUL,
+  0x00000000UL, 0x3fcb6355UL, 0xee9e9be5UL, 0xbe5c35bdUL, 0x80000000UL,
+  0x3fcb194aUL, 0x8416c0bcUL, 0x3e546d4fUL, 0x00000000UL, 0x3fcacf5eUL,
+  0x49f7f08fUL, 0x3e56da76UL, 0x00000000UL, 0x3fca858fUL, 0x5dc30de2UL,
+  0x3e5f390cUL, 0x00000000UL, 0x3fca3bdeUL, 0x950583b6UL, 0xbe5e4169UL,
+  0x80000000UL, 0x3fc9f249UL, 0x33631553UL, 0x3e52aeb1UL, 0x00000000UL,
+  0x3fc9a8d3UL, 0xde8795a6UL, 0xbe59a504UL, 0x00000000UL, 0x3fc95f79UL,
+  0x076bf41eUL, 0x3e5122feUL, 0x80000000UL, 0x3fc9163cUL, 0x2914c8e7UL,
+  0x3e3dd064UL, 0x00000000UL, 0x3fc8cd1dUL, 0x3a30eca3UL, 0xbe21b4aaUL,
+  0x80000000UL, 0x3fc8841aUL, 0xb2a96650UL, 0xbe575444UL, 0x80000000UL,
+  0x3fc83b34UL, 0x2376c0cbUL, 0xbe2a74c7UL, 0x80000000UL, 0x3fc7f26bUL,
+  0xd8a0b653UL, 0xbe5181b6UL, 0x00000000UL, 0x3fc7a9bfUL, 0x32257882UL,
+  0xbe4a78b4UL, 0x00000000UL, 0x3fc7612fUL, 0x1eee8bd9UL, 0xbe1bfe9dUL,
+  0x80000000UL, 0x3fc718bbUL, 0x0c603cc4UL, 0x3e36fdc9UL, 0x80000000UL,
+  0x3fc6d064UL, 0x3728b8cfUL, 0xbe1e542eUL, 0x80000000UL, 0x3fc68829UL,
+  0xc79a4067UL, 0x3e5c380fUL, 0x00000000UL, 0x3fc6400bUL, 0xf69eac69UL,
+  0x3e550a84UL, 0x80000000UL, 0x3fc5f808UL, 0xb7a780a4UL, 0x3e5d9224UL,
+  0x80000000UL, 0x3fc5b022UL, 0xad9dfb1eUL, 0xbe55242fUL, 0x00000000UL,
+  0x3fc56858UL, 0x659b18beUL, 0xbe4bfda3UL, 0x80000000UL, 0x3fc520a9UL,
+  0x66ee3631UL, 0xbe57d769UL, 0x80000000UL, 0x3fc4d916UL, 0x1ec62819UL,
+  0x3e2427f7UL, 0x80000000UL, 0x3fc4919fUL, 0xdec25369UL, 0xbe435431UL,
+  0x00000000UL, 0x3fc44a44UL, 0xa8acfc4bUL, 0xbe3c62e8UL, 0x00000000UL,
+  0x3fc40304UL, 0xcf1d3eabUL, 0xbdfba29fUL, 0x80000000UL, 0x3fc3bbdfUL,
+  0x79aba3eaUL, 0xbdf1b7c8UL, 0x80000000UL, 0x3fc374d6UL, 0xb8d186daUL,
+  0xbe5130cfUL, 0x80000000UL, 0x3fc32de8UL, 0x9d74f152UL, 0x3e2285b6UL,
+  0x00000000UL, 0x3fc2e716UL, 0x50ae7ca9UL, 0xbe503920UL, 0x80000000UL,
+  0x3fc2a05eUL, 0x6caed92eUL, 0xbe533924UL, 0x00000000UL, 0x3fc259c2UL,
+  0x9cb5034eUL, 0xbe510e31UL, 0x80000000UL, 0x3fc21340UL, 0x12c4d378UL,
+  0xbe540b43UL, 0x80000000UL, 0x3fc1ccd9UL, 0xcc418706UL, 0x3e59887aUL,
+  0x00000000UL, 0x3fc1868eUL, 0x921f4106UL, 0xbe528e67UL, 0x80000000UL,
+  0x3fc1405cUL, 0x3969441eUL, 0x3e5d8051UL, 0x00000000UL, 0x3fc0fa46UL,
+  0xd941ef5bUL, 0x3e5f9079UL, 0x80000000UL, 0x3fc0b44aUL, 0x5a3e81b2UL,
+  0xbe567691UL, 0x00000000UL, 0x3fc06e69UL, 0x9d66afe7UL, 0xbe4d43fbUL,
+  0x00000000UL, 0x3fc028a2UL, 0x0a92a162UL, 0xbe52f394UL, 0x00000000UL,
+  0x3fbfc5eaUL, 0x209897e5UL, 0x3e529e37UL, 0x00000000UL, 0x3fbf3ac5UL,
+  0x8458bd7bUL, 0x3e582831UL, 0x00000000UL, 0x3fbeafd5UL, 0xb8d8b4b8UL,
+  0xbe486b4aUL, 0x00000000UL, 0x3fbe2518UL, 0xe0a3b7b6UL, 0x3e5bafd2UL,
+  0x00000000UL, 0x3fbd9a90UL, 0x2bf2710eUL, 0x3e383b2bUL, 0x00000000UL,
+  0x3fbd103cUL, 0x73eb6ab7UL, 0xbe56d78dUL, 0x00000000UL, 0x3fbc861bUL,
+  0x32ceaff5UL, 0xbe32dc5aUL, 0x00000000UL, 0x3fbbfc2eUL, 0xbee04cb7UL,
+  0xbe4a71a4UL, 0x00000000UL, 0x3fbb7274UL, 0x35ae9577UL, 0x3e38142fUL,
+  0x00000000UL, 0x3fbae8eeUL, 0xcbaddab4UL, 0xbe5490f0UL, 0x00000000UL,
+  0x3fba5f9aUL, 0x95ce1114UL, 0x3e597c71UL, 0x00000000UL, 0x3fb9d67aUL,
+  0x6d7c0f78UL, 0x3e3abc2dUL, 0x00000000UL, 0x3fb94d8dUL, 0x2841a782UL,
+  0xbe566cbcUL, 0x00000000UL, 0x3fb8c4d2UL, 0x6ed429c6UL, 0xbe3cfff9UL,
+  0x00000000UL, 0x3fb83c4aUL, 0xe4a49fbbUL, 0xbe552964UL, 0x00000000UL,
+  0x3fb7b3f4UL, 0x2193d81eUL, 0xbe42fa72UL, 0x00000000UL, 0x3fb72bd0UL,
+  0xdd70c122UL, 0x3e527a8cUL, 0x00000000UL, 0x3fb6a3dfUL, 0x03108a54UL,
+  0xbe450393UL, 0x00000000UL, 0x3fb61c1fUL, 0x30ff7954UL, 0x3e565840UL,
+  0x00000000UL, 0x3fb59492UL, 0xdedd460cUL, 0xbe5422b5UL, 0x00000000UL,
+  0x3fb50d36UL, 0x950f9f45UL, 0xbe5313f6UL, 0x00000000UL, 0x3fb4860bUL,
+  0x582cdcb1UL, 0x3e506d39UL, 0x00000000UL, 0x3fb3ff12UL, 0x7216d3a6UL,
+  0x3e4aa719UL, 0x00000000UL, 0x3fb3784aUL, 0x57a423fdUL, 0x3e5a9b9fUL,
+  0x00000000UL, 0x3fb2f1b4UL, 0x7a138b41UL, 0xbe50b418UL, 0x00000000UL,
+  0x3fb26b4eUL, 0x2fbfd7eaUL, 0x3e23a53eUL, 0x00000000UL, 0x3fb1e519UL,
+  0x18913ccbUL, 0x3e465fc1UL, 0x00000000UL, 0x3fb15f15UL, 0x7ea24e21UL,
+  0x3e042843UL, 0x00000000UL, 0x3fb0d941UL, 0x7c6d9c77UL, 0x3e59f61eUL,
+  0x00000000UL, 0x3fb0539eUL, 0x114efd44UL, 0x3e4ccab7UL, 0x00000000UL,
+  0x3faf9c56UL, 0x1777f657UL, 0x3e552f65UL, 0x00000000UL, 0x3fae91d2UL,
+  0xc317b86aUL, 0xbe5a61e0UL, 0x00000000UL, 0x3fad87acUL, 0xb7664efbUL,
+  0xbe41f64eUL, 0x00000000UL, 0x3fac7de6UL, 0x5d3d03a9UL, 0x3e0807a0UL,
+  0x00000000UL, 0x3fab7480UL, 0x743c38ebUL, 0xbe3726e1UL, 0x00000000UL,
+  0x3faa6b78UL, 0x06a253f1UL, 0x3e5ad636UL, 0x00000000UL, 0x3fa962d0UL,
+  0xa35f541bUL, 0x3e5a187aUL, 0x00000000UL, 0x3fa85a88UL, 0x4b86e446UL,
+  0xbe508150UL, 0x00000000UL, 0x3fa7529cUL, 0x2589cacfUL, 0x3e52938aUL,
+  0x00000000UL, 0x3fa64b10UL, 0xaf6b11f2UL, 0xbe3454cdUL, 0x00000000UL,
+  0x3fa543e2UL, 0x97506fefUL, 0xbe5fdec5UL, 0x00000000UL, 0x3fa43d10UL,
+  0xe75f7dd9UL, 0xbe388dd3UL, 0x00000000UL, 0x3fa3369cUL, 0xa4139632UL,
+  0xbdea5177UL, 0x00000000UL, 0x3fa23086UL, 0x352d6f1eUL, 0xbe565ad6UL,
+  0x00000000UL, 0x3fa12accUL, 0x77449eb7UL, 0xbe50d5c7UL, 0x00000000UL,
+  0x3fa0256eUL, 0x7478da78UL, 0x3e404724UL, 0x00000000UL, 0x3f9e40dcUL,
+  0xf59cef7fUL, 0xbe539d0aUL, 0x00000000UL, 0x3f9c3790UL, 0x1511d43cUL,
+  0x3e53c2c8UL, 0x00000000UL, 0x3f9a2f00UL, 0x9b8bff3cUL, 0xbe43b3e1UL,
+  0x00000000UL, 0x3f982724UL, 0xad1e22a5UL, 0x3e46f0bdUL, 0x00000000UL,
+  0x3f962000UL, 0x130d9356UL, 0x3e475ba0UL, 0x00000000UL, 0x3f941994UL,
+  0x8f86f883UL, 0xbe513d0bUL, 0x00000000UL, 0x3f9213dcUL, 0x914d0dc8UL,
+  0xbe534335UL, 0x00000000UL, 0x3f900ed8UL, 0x2d73e5e7UL, 0xbe22ba75UL,
+  0x00000000UL, 0x3f8c1510UL, 0xc5b7d70eUL, 0x3e599c5dUL, 0x00000000UL,
+  0x3f880de0UL, 0x8a27857eUL, 0xbe3d28c8UL, 0x00000000UL, 0x3f840810UL,
+  0xda767328UL, 0x3e531b3dUL, 0x00000000UL, 0x3f8003b0UL, 0x77bacaf3UL,
+  0xbe5f04e3UL, 0x00000000UL, 0x3f780150UL, 0xdf4b0720UL, 0x3e5a8bffUL,
+  0x00000000UL, 0x3f6ffc40UL, 0x34c48e71UL, 0xbe3fcd99UL, 0x00000000UL,
+  0x3f5ff6c0UL, 0x1ad218afUL, 0xbe4c78a7UL, 0x00000000UL, 0x00000000UL,
+  0x00000000UL, 0x80000000UL
+};
+
+ALIGNED_(8) juint _log2_pow[] =
+{
+  0xfefa39efUL, 0x3fe62e42UL, 0xfefa39efUL, 0xbfe62e42UL
+};
+
+//registers,
+// input: xmm0, xmm1
+// scratch: xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7
+//          rax, rdx, rcx, r8, r11
+
+// Code generated by Intel C compiler for LIBM library
+
+void MacroAssembler::fast_pow(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ecx, Register edx, Register tmp1, Register tmp2, Register tmp3, Register tmp4) {
+  Label L_2TAG_PACKET_0_0_2, L_2TAG_PACKET_1_0_2, L_2TAG_PACKET_2_0_2, L_2TAG_PACKET_3_0_2;
+  Label L_2TAG_PACKET_4_0_2, L_2TAG_PACKET_5_0_2, L_2TAG_PACKET_6_0_2, L_2TAG_PACKET_7_0_2;
+  Label L_2TAG_PACKET_8_0_2, L_2TAG_PACKET_9_0_2, L_2TAG_PACKET_10_0_2, L_2TAG_PACKET_11_0_2;
+  Label L_2TAG_PACKET_12_0_2, L_2TAG_PACKET_13_0_2, L_2TAG_PACKET_14_0_2, L_2TAG_PACKET_15_0_2;
+  Label L_2TAG_PACKET_16_0_2, L_2TAG_PACKET_17_0_2, L_2TAG_PACKET_18_0_2, L_2TAG_PACKET_19_0_2;
+  Label L_2TAG_PACKET_20_0_2, L_2TAG_PACKET_21_0_2, L_2TAG_PACKET_22_0_2, L_2TAG_PACKET_23_0_2;
+  Label L_2TAG_PACKET_24_0_2, L_2TAG_PACKET_25_0_2, L_2TAG_PACKET_26_0_2, L_2TAG_PACKET_27_0_2;
+  Label L_2TAG_PACKET_28_0_2, L_2TAG_PACKET_29_0_2, L_2TAG_PACKET_30_0_2, L_2TAG_PACKET_31_0_2;
+  Label L_2TAG_PACKET_32_0_2, L_2TAG_PACKET_33_0_2, L_2TAG_PACKET_34_0_2, L_2TAG_PACKET_35_0_2;
+  Label L_2TAG_PACKET_36_0_2, L_2TAG_PACKET_37_0_2, L_2TAG_PACKET_38_0_2, L_2TAG_PACKET_39_0_2;
+  Label L_2TAG_PACKET_40_0_2, L_2TAG_PACKET_41_0_2, L_2TAG_PACKET_42_0_2, L_2TAG_PACKET_43_0_2;
+  Label L_2TAG_PACKET_44_0_2, L_2TAG_PACKET_45_0_2, L_2TAG_PACKET_46_0_2, L_2TAG_PACKET_47_0_2;
+  Label L_2TAG_PACKET_48_0_2, L_2TAG_PACKET_49_0_2, L_2TAG_PACKET_50_0_2, L_2TAG_PACKET_51_0_2;
+  Label L_2TAG_PACKET_52_0_2, L_2TAG_PACKET_53_0_2, L_2TAG_PACKET_54_0_2, L_2TAG_PACKET_55_0_2;
+  Label L_2TAG_PACKET_56_0_2;
+  Label B1_2, B1_3, B1_5, start;
+
+  assert_different_registers(tmp1, tmp2, eax, ecx, edx);
+  jmp(start);
+  address HIGHSIGMASK = (address)_HIGHSIGMASK;
+  address LOG2_E = (address)_LOG2_E;
+  address coeff = (address)_coeff_pow;
+  address L_tbl = (address)_L_tbl_pow;
+  address HIGHMASK_Y = (address)_HIGHMASK_Y;
+  address T_exp = (address)_T_exp;
+  address e_coeff = (address)_e_coeff;
+  address coeff_h = (address)_coeff_h;
+  address HIGHMASK_LOG_X = (address)_HIGHMASK_LOG_X;
+  address HALFMASK = (address)_HALFMASK;
+  address log2 = (address)_log2_pow;
+
+
+  bind(start);
+  subq(rsp, 40);
+  movsd(Address(rsp, 8), xmm0);
+  movsd(Address(rsp, 16), xmm1);
+
+  bind(B1_2);
+  pextrw(eax, xmm0, 3);
+  xorpd(xmm2, xmm2);
+  mov64(tmp2, 0x3ff0000000000000);
+  movdq(xmm2, tmp2);
+  movl(tmp1, 1069088768);
+  movdq(xmm7, tmp1);
+  xorpd(xmm1, xmm1);
+  mov64(tmp3, 0x77f0000000000000);
+  movdq(xmm1, tmp3);
+  movdqu(xmm3, xmm0);
+  movl(edx, 32752);
+  andl(edx, eax);
+  subl(edx, 16368);
+  movl(ecx, edx);
+  sarl(edx, 31);
+  addl(ecx, edx);
+  xorl(ecx, edx);
+  por(xmm0, xmm2);
+  movdqu(xmm6, ExternalAddress(HIGHSIGMASK));    //0x00000000UL, 0xfffff800UL, 0x00000000UL, 0xfffff800UL
+  psrlq(xmm0, 27);
+  movq(xmm2, ExternalAddress(LOG2_E));    //0x00000000UL, 0x3ff72000UL, 0x161bb241UL, 0xbf5dabe1UL
+  psrld(xmm0, 2);
+  addl(ecx, 16);
+  bsrl(ecx, ecx);
+  rcpps(xmm0, xmm0);
+  psllq(xmm3, 12);
+  movl(tmp4, 8192);
+  movdq(xmm4, tmp4);
+  psrlq(xmm3, 12);
+  subl(eax, 16);
+  cmpl(eax, 32736);
+  jcc(Assembler::aboveEqual, L_2TAG_PACKET_0_0_2);
+  movl(tmp1, 0);
+
+  bind(L_2TAG_PACKET_1_0_2);
+  mulss(xmm0, xmm7);
+  movl(edx, -1);
+  subl(ecx, 4);
+  shll(edx);
+  shlq(edx, 32);
+  movdq(xmm5, edx);
+  por(xmm3, xmm1);
+  subl(eax, 16351);
+  cmpl(eax, 1);
+  jcc(Assembler::belowEqual, L_2TAG_PACKET_2_0_2);
+  paddd(xmm0, xmm4);
+  pand(xmm5, xmm3);
+  movdl(edx, xmm0);
+  psllq(xmm0, 29);
+
+  bind(L_2TAG_PACKET_3_0_2);
+  subsd(xmm3, xmm5);
+  pand(xmm0, xmm6);
+  subl(eax, 1);
+  sarl(eax, 4);
+  cvtsi2sdl(xmm7, eax);
+  mulpd(xmm5, xmm0);
+
+  bind(L_2TAG_PACKET_4_0_2);
+  mulsd(xmm3, xmm0);
+  movdqu(xmm1, ExternalAddress(coeff));    //0x6dc96112UL, 0xbf836578UL, 0xee241472UL, 0xbf9b0301UL
+  lea(tmp4, ExternalAddress(L_tbl));
+  subsd(xmm5, xmm2);
+  movdqu(xmm4, ExternalAddress(16 + coeff));    //0x9f95985aUL, 0xbfb528dbUL, 0xb3841d2aUL, 0xbfd619b6UL
+  movl(ecx, eax);
+  sarl(eax, 31);
+  addl(ecx, eax);
+  xorl(eax, ecx);
+  addl(eax, 1);
+  bsrl(eax, eax);
+  unpcklpd(xmm5, xmm3);
+  movdqu(xmm6, ExternalAddress(32 + coeff));    //0x518775e3UL, 0x3f9004f2UL, 0xac8349bbUL, 0x3fa76c9bUL
+  addsd(xmm3, xmm5);
+  andl(edx, 16760832);
+  shrl(edx, 10);
+  addpd(xmm5, Address(tmp4, edx, Address::times_1, -3648));
+  movdqu(xmm0, ExternalAddress(48 + coeff));    //0x486ececcUL, 0x3fc4635eUL, 0x161bb241UL, 0xbf5dabe1UL
+  pshufd(xmm2, xmm3, 68);
+  mulsd(xmm3, xmm3);
+  mulpd(xmm1, xmm2);
+  mulpd(xmm4, xmm2);
+  addsd(xmm5, xmm7);
+  mulsd(xmm2, xmm3);
+  addpd(xmm6, xmm1);
+  mulsd(xmm3, xmm3);
+  addpd(xmm0, xmm4);
+  movq(xmm1, Address(rsp, 16));
+  movw(ecx, Address(rsp, 22));
+  pshufd(xmm7, xmm5, 238);
+  movq(xmm4, ExternalAddress(HIGHMASK_Y));    //0x00000000UL, 0xfffffff8UL, 0x00000000UL, 0xffffffffUL
+  mulpd(xmm6, xmm2);
+  pshufd(xmm3, xmm3, 68);
+  mulpd(xmm0, xmm2);
+  shll(eax, 4);
+  subl(eax, 15872);
+  andl(ecx, 32752);
+  addl(eax, ecx);
+  mulpd(xmm3, xmm6);
+  cmpl(eax, 624);
+  jcc(Assembler::aboveEqual, L_2TAG_PACKET_5_0_2);
+  xorpd(xmm6, xmm6);
+  movl(edx, 17080);
+  pinsrw(xmm6, edx, 3);
+  movdqu(xmm2, xmm1);
+  pand(xmm4, xmm1);
+  subsd(xmm1, xmm4);
+  mulsd(xmm4, xmm5);
+  addsd(xmm0, xmm7);
+  mulsd(xmm1, xmm5);
+  movdqu(xmm7, xmm6);
+  addsd(xmm6, xmm4);
+  lea(tmp4, ExternalAddress(T_exp));
+  addpd(xmm3, xmm0);
+  movdl(edx, xmm6);
+  subsd(xmm6, xmm7);
+  pshufd(xmm0, xmm3, 238);
+  subsd(xmm4, xmm6);
+  addsd(xmm0, xmm3);
+  movl(ecx, edx);
+  andl(edx, 255);
+  addl(edx, edx);
+  movdqu(xmm5, Address(tmp4, edx, Address::times_8, 0));
+  addsd(xmm4, xmm1);
+  mulsd(xmm2, xmm0);
+  movdqu(xmm7, ExternalAddress(e_coeff));    //0xe78a6731UL, 0x3f55d87fUL, 0xd704a0c0UL, 0x3fac6b08UL
+  movdqu(xmm3, ExternalAddress(16 + e_coeff));    //0x6fba4e77UL, 0x3f83b2abUL, 0xff82c58fUL, 0x3fcebfbdUL
+  shll(ecx, 12);
+  xorl(ecx, tmp1);
+  andl(rcx, -1048576);
+  movdq(xmm6, rcx);
+  addsd(xmm2, xmm4);
+  mov64(tmp2, 0x3fe62e42fefa39ef);
+  movdq(xmm1, tmp2);
+  pshufd(xmm0, xmm2, 68);
+  pshufd(xmm4, xmm2, 68);
+  mulsd(xmm1, xmm2);
+  pshufd(xmm6, xmm6, 17);
+  mulpd(xmm0, xmm0);
+  mulpd(xmm7, xmm4);
+  paddd(xmm5, xmm6);
+  mulsd(xmm1, xmm5);
+  pshufd(xmm6, xmm5, 238);
+  mulsd(xmm0, xmm0);
+  addpd(xmm3, xmm7);
+  addsd(xmm1, xmm6);
+  mulpd(xmm0, xmm3);
+  pshufd(xmm3, xmm0, 238);
+  mulsd(xmm0, xmm5);
+  mulsd(xmm3, xmm5);
+  addsd(xmm0, xmm1);
+  addsd(xmm0, xmm3);
+  addsd(xmm0, xmm5);
+  jmp(B1_5);
+
+  bind(L_2TAG_PACKET_0_0_2);
+  addl(eax, 16);
+  movl(edx, 32752);
+  andl(edx, eax);
+  cmpl(edx, 32752);
+  jcc(Assembler::equal, L_2TAG_PACKET_6_0_2);
+  testl(eax, 32768);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_7_0_2);
+
+  bind(L_2TAG_PACKET_8_0_2);
+  movq(xmm0, Address(rsp, 8));
+  movq(xmm3, Address(rsp, 8));
+  movdl(edx, xmm3);
+  psrlq(xmm3, 32);
+  movdl(ecx, xmm3);
+  orl(edx, ecx);
+  cmpl(edx, 0);
+  jcc(Assembler::equal, L_2TAG_PACKET_9_0_2);
+  xorpd(xmm3, xmm3);
+  movl(eax, 18416);
+  pinsrw(xmm3, eax, 3);
+  mulsd(xmm0, xmm3);
+  xorpd(xmm2, xmm2);
+  movl(eax, 16368);
+  pinsrw(xmm2, eax, 3);
+  movdqu(xmm3, xmm0);
+  pextrw(eax, xmm0, 3);
+  por(xmm0, xmm2);
+  movl(ecx, 18416);
+  psrlq(xmm0, 27);
+  movq(xmm2, ExternalAddress(LOG2_E));    //0x00000000UL, 0x3ff72000UL, 0x161bb241UL, 0xbf5dabe1UL
+  psrld(xmm0, 2);
+  rcpps(xmm0, xmm0);
+  psllq(xmm3, 12);
+  movdqu(xmm6, ExternalAddress(HIGHSIGMASK));    //0x00000000UL, 0xfffff800UL, 0x00000000UL, 0xfffff800UL
+  psrlq(xmm3, 12);
+  mulss(xmm0, xmm7);
+  movl(edx, -1024);
+  movdl(xmm5, edx);
+  por(xmm3, xmm1);
+  paddd(xmm0, xmm4);
+  psllq(xmm5, 32);
+  movdl(edx, xmm0);
+  psllq(xmm0, 29);
+  pand(xmm5, xmm3);
+  movl(tmp1, 0);
+  pand(xmm0, xmm6);
+  subsd(xmm3, xmm5);
+  andl(eax, 32752);
+  subl(eax, 18416);
+  sarl(eax, 4);
+  cvtsi2sdl(xmm7, eax);
+  mulpd(xmm5, xmm0);
+  jmp(L_2TAG_PACKET_4_0_2);
+
+  bind(L_2TAG_PACKET_10_0_2);
+  movq(xmm0, Address(rsp, 8));
+  movq(xmm3, Address(rsp, 8));
+  movdl(edx, xmm3);
+  psrlq(xmm3, 32);
+  movdl(ecx, xmm3);
+  orl(edx, ecx);
+  cmpl(edx, 0);
+  jcc(Assembler::equal, L_2TAG_PACKET_9_0_2);
+  xorpd(xmm3, xmm3);
+  movl(eax, 18416);
+  pinsrw(xmm3, eax, 3);
+  mulsd(xmm0, xmm3);
+  xorpd(xmm2, xmm2);
+  movl(eax, 16368);
+  pinsrw(xmm2, eax, 3);
+  movdqu(xmm3, xmm0);
+  pextrw(eax, xmm0, 3);
+  por(xmm0, xmm2);
+  movl(ecx, 18416);
+  psrlq(xmm0, 27);
+  movq(xmm2, ExternalAddress(LOG2_E));    //0x00000000UL, 0x3ff72000UL, 0x161bb241UL, 0xbf5dabe1UL
+  psrld(xmm0, 2);
+  rcpps(xmm0, xmm0);
+  psllq(xmm3, 12);
+  movdqu(xmm6, ExternalAddress(HIGHSIGMASK));    //0x00000000UL, 0xfffff800UL, 0x00000000UL, 0xfffff800UL
+  psrlq(xmm3, 12);
+  mulss(xmm0, xmm7);
+  movl(edx, -1024);
+  movdl(xmm5, edx);
+  por(xmm3, xmm1);
+  paddd(xmm0, xmm4);
+  psllq(xmm5, 32);
+  movdl(edx, xmm0);
+  psllq(xmm0, 29);
+  pand(xmm5, xmm3);
+  movl(tmp1, INT_MIN);
+  pand(xmm0, xmm6);
+  subsd(xmm3, xmm5);
+  andl(eax, 32752);
+  subl(eax, 18416);
+  sarl(eax, 4);
+  cvtsi2sdl(xmm7, eax);
+  mulpd(xmm5, xmm0);
+  jmp(L_2TAG_PACKET_4_0_2);
+
+  bind(L_2TAG_PACKET_5_0_2);
+  cmpl(eax, 0);
+  jcc(Assembler::less, L_2TAG_PACKET_11_0_2);
+  cmpl(eax, 752);
+  jcc(Assembler::aboveEqual, L_2TAG_PACKET_12_0_2);
+  addsd(xmm0, xmm7);
+  movq(xmm2, ExternalAddress(HALFMASK));    //0xf8000000UL, 0xffffffffUL, 0xf8000000UL, 0xffffffffUL
+  addpd(xmm3, xmm0);
+  xorpd(xmm6, xmm6);
+  movl(eax, 17080);
+  pinsrw(xmm6, eax, 3);
+  pshufd(xmm0, xmm3, 238);
+  addsd(xmm0, xmm3);
+  movdqu(xmm3, xmm5);
+  addsd(xmm5, xmm0);
+  movdqu(xmm4, xmm2);
+  subsd(xmm3, xmm5);
+  movdqu(xmm7, xmm5);
+  pand(xmm5, xmm2);
+  movdqu(xmm2, xmm1);
+  pand(xmm4, xmm1);
+  subsd(xmm7, xmm5);
+  addsd(xmm0, xmm3);
+  subsd(xmm1, xmm4);
+  mulsd(xmm4, xmm5);
+  addsd(xmm0, xmm7);
+  mulsd(xmm2, xmm0);
+  movdqu(xmm7, xmm6);
+  mulsd(xmm1, xmm5);
+  addsd(xmm6, xmm4);
+  movdl(eax, xmm6);
+  subsd(xmm6, xmm7);
+  lea(tmp4, ExternalAddress(T_exp));
+  addsd(xmm2, xmm1);
+  movdqu(xmm7, ExternalAddress(e_coeff));    //0xe78a6731UL, 0x3f55d87fUL, 0xd704a0c0UL, 0x3fac6b08UL
+  movdqu(xmm3, ExternalAddress(16 + e_coeff));    //0x6fba4e77UL, 0x3f83b2abUL, 0xff82c58fUL, 0x3fcebfbdUL
+  subsd(xmm4, xmm6);
+  pextrw(edx, xmm6, 3);
+  movl(ecx, eax);
+  andl(eax, 255);
+  addl(eax, eax);
+  movdqu(xmm5, Address(tmp4, rax, Address::times_8, 0));
+  addsd(xmm2, xmm4);
+  sarl(ecx, 8);
+  movl(eax, ecx);
+  sarl(ecx, 1);
+  subl(eax, ecx);
+  shll(ecx, 20);
+  xorl(ecx, tmp1);
+  movdl(xmm6, ecx);
+  movq(xmm1, ExternalAddress(32 + e_coeff));    //0xfefa39efUL, 0x3fe62e42UL, 0x00000000UL, 0x00000000UL
+  andl(edx, 32767);
+  cmpl(edx, 16529);
+  jcc(Assembler::above, L_2TAG_PACKET_12_0_2);
+  pshufd(xmm0, xmm2, 68);
+  pshufd(xmm4, xmm2, 68);
+  mulpd(xmm0, xmm0);
+  mulpd(xmm7, xmm4);
+  pshufd(xmm6, xmm6, 17);
+  mulsd(xmm1, xmm2);
+  mulsd(xmm0, xmm0);
+  paddd(xmm5, xmm6);
+  addpd(xmm3, xmm7);
+  mulsd(xmm1, xmm5);
+  pshufd(xmm6, xmm5, 238);
+  mulpd(xmm0, xmm3);
+  addsd(xmm1, xmm6);
+  pshufd(xmm3, xmm0, 238);
+  mulsd(xmm0, xmm5);
+  mulsd(xmm3, xmm5);
+  shll(eax, 4);
+  xorpd(xmm4, xmm4);
+  addl(eax, 16368);
+  pinsrw(xmm4, eax, 3);
+  addsd(xmm0, xmm1);
+  addsd(xmm0, xmm3);
+  movdqu(xmm1, xmm0);
+  addsd(xmm0, xmm5);
+  mulsd(xmm0, xmm4);
+  pextrw(eax, xmm0, 3);
+  andl(eax, 32752);
+  jcc(Assembler::equal, L_2TAG_PACKET_13_0_2);
+  cmpl(eax, 32752);
+  jcc(Assembler::equal, L_2TAG_PACKET_14_0_2);
+  jmp(B1_5);
+
+  bind(L_2TAG_PACKET_6_0_2);
+  movq(xmm1, Address(rsp, 16));
+  movq(xmm0, Address(rsp, 8));
+  movdqu(xmm2, xmm0);
+  movdl(eax, xmm2);
+  psrlq(xmm2, 20);
+  movdl(edx, xmm2);
+  orl(eax, edx);
+  jcc(Assembler::equal, L_2TAG_PACKET_15_0_2);
+  movdl(eax, xmm1);
+  psrlq(xmm1, 32);
+  movdl(edx, xmm1);
+  movl(ecx, edx);
+  addl(edx, edx);
+  orl(eax, edx);
+  jcc(Assembler::equal, L_2TAG_PACKET_16_0_2);
+  addsd(xmm0, xmm0);
+  jmp(B1_5);
+
+  bind(L_2TAG_PACKET_16_0_2);
+  xorpd(xmm0, xmm0);
+  movl(eax, 16368);
+  pinsrw(xmm0, eax, 3);
+  movl(Address(rsp, 0), 29);
+  jmp(L_2TAG_PACKET_17_0_2);
+
+  bind(L_2TAG_PACKET_18_0_2);
+  movq(xmm0, Address(rsp, 16));
+  addpd(xmm0, xmm0);
+  jmp(B1_5);
+
+  bind(L_2TAG_PACKET_15_0_2);
+  movdl(eax, xmm1);
+  movdqu(xmm2, xmm1);
+  psrlq(xmm1, 32);
+  movdl(edx, xmm1);
+  movl(ecx, edx);
+  addl(edx, edx);
+  orl(eax, edx);
+  jcc(Assembler::equal, L_2TAG_PACKET_19_0_2);
+  pextrw(eax, xmm2, 3);
+  andl(eax, 32752);
+  cmpl(eax, 32752);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_20_0_2);
+  movdl(eax, xmm2);
+  psrlq(xmm2, 20);
+  movdl(edx, xmm2);
+  orl(eax, edx);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_18_0_2);
+
+  bind(L_2TAG_PACKET_20_0_2);
+  pextrw(eax, xmm0, 3);
+  testl(eax, 32768);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_21_0_2);
+  testl(ecx, INT_MIN);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_22_0_2);
+  jmp(B1_5);
+
+  bind(L_2TAG_PACKET_23_0_2);
+  movq(xmm1, Address(rsp, 16));
+  movdl(eax, xmm1);
+  testl(eax, 1);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_24_0_2);
+  testl(eax, 2);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_25_0_2);
+  jmp(L_2TAG_PACKET_24_0_2);
+
+  bind(L_2TAG_PACKET_21_0_2);
+  shrl(ecx, 20);
+  andl(ecx, 2047);
+  cmpl(ecx, 1075);
+  jcc(Assembler::above, L_2TAG_PACKET_24_0_2);
+  jcc(Assembler::equal, L_2TAG_PACKET_26_0_2);
+  cmpl(ecx, 1074);
+  jcc(Assembler::above, L_2TAG_PACKET_23_0_2);
+  cmpl(ecx, 1023);
+  jcc(Assembler::below, L_2TAG_PACKET_24_0_2);
+  movq(xmm1, Address(rsp, 16));
+  movl(eax, 17208);
+  xorpd(xmm3, xmm3);
+  pinsrw(xmm3, eax, 3);
+  movdqu(xmm4, xmm3);
+  addsd(xmm3, xmm1);
+  subsd(xmm4, xmm3);
+  addsd(xmm1, xmm4);
+  pextrw(eax, xmm1, 3);
+  andl(eax, 32752);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_24_0_2);
+  movdl(eax, xmm3);
+  andl(eax, 1);
+  jcc(Assembler::equal, L_2TAG_PACKET_24_0_2);
+
+  bind(L_2TAG_PACKET_25_0_2);
+  movq(xmm1, Address(rsp, 16));
+  pextrw(eax, xmm1, 3);
+  andl(eax, 32768);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_27_0_2);
+  jmp(B1_5);
+
+  bind(L_2TAG_PACKET_27_0_2);
+  xorpd(xmm0, xmm0);
+  movl(eax, 32768);
+  pinsrw(xmm0, eax, 3);
+  jmp(B1_5);
+
+  bind(L_2TAG_PACKET_24_0_2);
+  movq(xmm1, Address(rsp, 16));
+  pextrw(eax, xmm1, 3);
+  andl(eax, 32768);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_22_0_2);
+  xorpd(xmm0, xmm0);
+  movl(eax, 32752);
+  pinsrw(xmm0, eax, 3);
+  jmp(B1_5);
+
+  bind(L_2TAG_PACKET_26_0_2);
+  movq(xmm1, Address(rsp, 16));
+  movdl(eax, xmm1);
+  andl(eax, 1);
+  jcc(Assembler::equal, L_2TAG_PACKET_24_0_2);
+  jmp(L_2TAG_PACKET_25_0_2);
+
+  bind(L_2TAG_PACKET_28_0_2);
+  movdl(eax, xmm1);
+  psrlq(xmm1, 20);
+  movdl(edx, xmm1);
+  orl(eax, edx);
+  jcc(Assembler::equal, L_2TAG_PACKET_29_0_2);
+  movq(xmm0, Address(rsp, 16));
+  addsd(xmm0, xmm0);
+  jmp(B1_5);
+
+  bind(L_2TAG_PACKET_29_0_2);
+  movq(xmm0, Address(rsp, 8));
+  pextrw(eax, xmm0, 3);
+  cmpl(eax, 49136);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_30_0_2);
+  movdl(ecx, xmm0);
+  psrlq(xmm0, 20);
+  movdl(edx, xmm0);
+  orl(ecx, edx);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_30_0_2);
+  xorpd(xmm0, xmm0);
+  movl(eax, 32760);
+  pinsrw(xmm0, eax, 3);
+  jmp(B1_5);
+
+  bind(L_2TAG_PACKET_30_0_2);
+  movq(xmm1, Address(rsp, 16));
+  andl(eax, 32752);
+  subl(eax, 16368);
+  pextrw(edx, xmm1, 3);
+  xorpd(xmm0, xmm0);
+  xorl(eax, edx);
+  andl(eax, 32768);
+  jcc(Assembler::equal, L_2TAG_PACKET_31_0_2);
+  jmp(B1_5);
+
+  bind(L_2TAG_PACKET_31_0_2);
+  movl(ecx, 32752);
+  pinsrw(xmm0, ecx, 3);
+  jmp(B1_5);
+
+  bind(L_2TAG_PACKET_32_0_2);
+  movdl(eax, xmm1);
+  cmpl(edx, 17184);
+  jcc(Assembler::above, L_2TAG_PACKET_33_0_2);
+  testl(eax, 1);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_34_0_2);
+  testl(eax, 2);
+  jcc(Assembler::equal, L_2TAG_PACKET_35_0_2);
+  jmp(L_2TAG_PACKET_36_0_2);
+
+  bind(L_2TAG_PACKET_33_0_2);
+  testl(eax, 1);
+  jcc(Assembler::equal, L_2TAG_PACKET_35_0_2);
+  jmp(L_2TAG_PACKET_36_0_2);
+
+  bind(L_2TAG_PACKET_7_0_2);
+  movq(xmm2, Address(rsp, 8));
+  movdl(eax, xmm2);
+  psrlq(xmm2, 31);
+  movdl(ecx, xmm2);
+  orl(eax, ecx);
+  jcc(Assembler::equal, L_2TAG_PACKET_9_0_2);
+  movq(xmm1, Address(rsp, 16));
+  pextrw(edx, xmm1, 3);
+  movdl(eax, xmm1);
+  movdqu(xmm2, xmm1);
+  psrlq(xmm2, 32);
+  movdl(ecx, xmm2);
+  addl(ecx, ecx);
+  orl(ecx, eax);
+  jcc(Assembler::equal, L_2TAG_PACKET_37_0_2);
+  andl(edx, 32752);
+  cmpl(edx, 32752);
+  jcc(Assembler::equal, L_2TAG_PACKET_28_0_2);
+  cmpl(edx, 17200);
+  jcc(Assembler::above, L_2TAG_PACKET_35_0_2);
+  cmpl(edx, 17184);
+  jcc(Assembler::aboveEqual, L_2TAG_PACKET_32_0_2);
+  cmpl(edx, 16368);
+  jcc(Assembler::below, L_2TAG_PACKET_34_0_2);
+  movl(eax, 17208);
+  xorpd(xmm2, xmm2);
+  pinsrw(xmm2, eax, 3);
+  movdqu(xmm4, xmm2);
+  addsd(xmm2, xmm1);
+  subsd(xmm4, xmm2);
+  addsd(xmm1, xmm4);
+  pextrw(eax, xmm1, 3);
+  andl(eax, 32767);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_34_0_2);
+  movdl(eax, xmm2);
+  andl(eax, 1);
+  jcc(Assembler::equal, L_2TAG_PACKET_35_0_2);
+
+  bind(L_2TAG_PACKET_36_0_2);
+  xorpd(xmm1, xmm1);
+  movl(edx, 30704);
+  pinsrw(xmm1, edx, 3);
+  movq(xmm2, ExternalAddress(LOG2_E));    //0x00000000UL, 0x3ff72000UL, 0x161bb241UL, 0xbf5dabe1UL
+  movq(xmm4, Address(rsp, 8));
+  pextrw(eax, xmm4, 3);
+  movl(edx, 8192);
+  movdl(xmm4, edx);
+  andl(eax, 32767);
+  subl(eax, 16);
+  jcc(Assembler::less, L_2TAG_PACKET_10_0_2);
+  movl(edx, eax);
+  andl(edx, 32752);
+  subl(edx, 16368);
+  movl(ecx, edx);
+  sarl(edx, 31);
+  addl(ecx, edx);
+  xorl(ecx, edx);
+  addl(ecx, 16);
+  bsrl(ecx, ecx);
+  movl(tmp1, INT_MIN);
+  jmp(L_2TAG_PACKET_1_0_2);
+
+  bind(L_2TAG_PACKET_34_0_2);
+  xorpd(xmm1, xmm1);
+  movl(eax, 32752);
+  pinsrw(xmm1, eax, 3);
+  xorpd(xmm0, xmm0);
+  mulsd(xmm0, xmm1);
+  movl(Address(rsp, 0), 28);
+  jmp(L_2TAG_PACKET_17_0_2);
+
+  bind(L_2TAG_PACKET_35_0_2);
+  xorpd(xmm1, xmm1);
+  movl(edx, 30704);
+  pinsrw(xmm1, edx, 3);
+  movq(xmm2, ExternalAddress(LOG2_E));    //0x00000000UL, 0x3ff72000UL, 0x161bb241UL, 0xbf5dabe1UL
+  movq(xmm4, Address(rsp, 8));
+  pextrw(eax, xmm4, 3);
+  movl(edx, 8192);
+  movdl(xmm4, edx);
+  andl(eax, 32767);
+  subl(eax, 16);
+  jcc(Assembler::less, L_2TAG_PACKET_8_0_2);
+  movl(edx, eax);
+  andl(edx, 32752);
+  subl(edx, 16368);
+  movl(ecx, edx);
+  sarl(edx, 31);
+  addl(ecx, edx);
+  xorl(ecx, edx);
+  addl(ecx, 16);
+  bsrl(ecx, ecx);
+  movl(tmp1, 0);
+  jmp(L_2TAG_PACKET_1_0_2);
+
+  bind(L_2TAG_PACKET_19_0_2);
+  xorpd(xmm0, xmm0);
+  movl(eax, 16368);
+  pinsrw(xmm0, eax, 3);
+  jmp(B1_5);
+
+  bind(L_2TAG_PACKET_22_0_2);
+  xorpd(xmm0, xmm0);
+  jmp(B1_5);
+
+  bind(L_2TAG_PACKET_11_0_2);
+  addl(eax, 384);
+  cmpl(eax, 0);
+  jcc(Assembler::less, L_2TAG_PACKET_38_0_2);
+  mulsd(xmm5, xmm1);
+  addsd(xmm0, xmm7);
+  shrl(tmp1, 31);
+  addpd(xmm3, xmm0);
+  pshufd(xmm0, xmm3, 238);
+  addsd(xmm3, xmm0);
+  lea(tmp4, ExternalAddress(log2));    //0xfefa39efUL, 0x3fe62e42UL, 0xfefa39efUL, 0xbfe62e42UL
+  movq(xmm4, Address(tmp4, tmp1, Address::times_8, 0));
+  mulsd(xmm1, xmm3);
+  xorpd(xmm0, xmm0);
+  movl(eax, 16368);
+  shll(tmp1, 15);
+  orl(eax, tmp1);
+  pinsrw(xmm0, eax, 3);
+  addsd(xmm5, xmm1);
+  mulsd(xmm5, xmm4);
+  addsd(xmm0, xmm5);
+  jmp(B1_5);
+
+  bind(L_2TAG_PACKET_38_0_2);
+
+  bind(L_2TAG_PACKET_37_0_2);
+  xorpd(xmm0, xmm0);
+  movl(eax, 16368);
+  pinsrw(xmm0, eax, 3);
+  jmp(B1_5);
+
+  bind(L_2TAG_PACKET_39_0_2);
+  xorpd(xmm0, xmm0);
+  movl(eax, 16368);
+  pinsrw(xmm0, eax, 3);
+  movl(Address(rsp, 0), 26);
+  jmp(L_2TAG_PACKET_17_0_2);
+
+  bind(L_2TAG_PACKET_9_0_2);
+  movq(xmm1, Address(rsp, 16));
+  movdqu(xmm2, xmm1);
+  pextrw(eax, xmm1, 3);
+  andl(eax, 32752);
+  cmpl(eax, 32752);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_40_0_2);
+  movdl(eax, xmm2);
+  psrlq(xmm2, 20);
+  movdl(edx, xmm2);
+  orl(eax, edx);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_18_0_2);
+
+  bind(L_2TAG_PACKET_40_0_2);
+  movdl(eax, xmm1);
+  psrlq(xmm1, 32);
+  movdl(edx, xmm1);
+  movl(ecx, edx);
+  addl(edx, edx);
+  orl(eax, edx);
+  jcc(Assembler::equal, L_2TAG_PACKET_39_0_2);
+  shrl(edx, 21);
+  cmpl(edx, 1075);
+  jcc(Assembler::above, L_2TAG_PACKET_41_0_2);
+  jcc(Assembler::equal, L_2TAG_PACKET_42_0_2);
+  cmpl(edx, 1023);
+  jcc(Assembler::below, L_2TAG_PACKET_41_0_2);
+  movq(xmm1, Address(rsp, 16));
+  movl(eax, 17208);
+  xorpd(xmm3, xmm3);
+  pinsrw(xmm3, eax, 3);
+  movdqu(xmm4, xmm3);
+  addsd(xmm3, xmm1);
+  subsd(xmm4, xmm3);
+  addsd(xmm1, xmm4);
+  pextrw(eax, xmm1, 3);
+  andl(eax, 32752);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_41_0_2);
+  movdl(eax, xmm3);
+  andl(eax, 1);
+  jcc(Assembler::equal, L_2TAG_PACKET_41_0_2);
+
+  bind(L_2TAG_PACKET_43_0_2);
+  movq(xmm0, Address(rsp, 8));
+  testl(ecx, INT_MIN);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_44_0_2);
+  jmp(B1_5);
+
+  bind(L_2TAG_PACKET_42_0_2);
+  movq(xmm1, Address(rsp, 16));
+  movdl(eax, xmm1);
+  testl(eax, 1);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_43_0_2);
+
+  bind(L_2TAG_PACKET_41_0_2);
+  testl(ecx, INT_MIN);
+  jcc(Assembler::equal, L_2TAG_PACKET_22_0_2);
+  xorpd(xmm0, xmm0);
+
+  bind(L_2TAG_PACKET_44_0_2);
+  movl(eax, 16368);
+  xorpd(xmm1, xmm1);
+  pinsrw(xmm1, eax, 3);
+  divsd(xmm1, xmm0);
+  movdqu(xmm0, xmm1);
+  movl(Address(rsp, 0), 27);
+  jmp(L_2TAG_PACKET_17_0_2);
+
+  bind(L_2TAG_PACKET_12_0_2);
+  movq(xmm2, Address(rsp, 8));
+  movq(xmm6, Address(rsp, 16));
+  pextrw(eax, xmm2, 3);
+  pextrw(edx, xmm6, 3);
+  movl(ecx, 32752);
+  andl(ecx, edx);
+  cmpl(ecx, 32752);
+  jcc(Assembler::equal, L_2TAG_PACKET_45_0_2);
+  andl(eax, 32752);
+  subl(eax, 16368);
+  xorl(edx, eax);
+  testl(edx, 32768);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_46_0_2);
+
+  bind(L_2TAG_PACKET_47_0_2);
+  movl(eax, 32736);
+  pinsrw(xmm0, eax, 3);
+  shrl(tmp1, 16);
+  orl(eax, tmp1);
+  pinsrw(xmm1, eax, 3);
+  mulsd(xmm0, xmm1);
+
+  bind(L_2TAG_PACKET_14_0_2);
+  movl(Address(rsp, 0), 24);
+  jmp(L_2TAG_PACKET_17_0_2);
+
+  bind(L_2TAG_PACKET_46_0_2);
+  movl(eax, 16);
+  pinsrw(xmm0, eax, 3);
+  mulsd(xmm0, xmm0);
+  testl(tmp1, INT_MIN);
+  jcc(Assembler::equal, L_2TAG_PACKET_48_0_2);
+  mov64(tmp2, 0x8000000000000000);
+  movdq(xmm2, tmp2);
+  xorpd(xmm0, xmm2);
+
+  bind(L_2TAG_PACKET_48_0_2);
+  movl(Address(rsp, 0), 25);
+  jmp(L_2TAG_PACKET_17_0_2);
+
+  bind(L_2TAG_PACKET_13_0_2);
+  pextrw(ecx, xmm5, 3);
+  pextrw(edx, xmm4, 3);
+  movl(eax, -1);
+  andl(ecx, 32752);
+  subl(ecx, 16368);
+  andl(edx, 32752);
+  addl(edx, ecx);
+  movl(ecx, -31);
+  sarl(edx, 4);
+  subl(ecx, edx);
+  jcc(Assembler::lessEqual, L_2TAG_PACKET_49_0_2);
+  cmpl(ecx, 20);
+  jcc(Assembler::above, L_2TAG_PACKET_50_0_2);
+  shll(eax);
+
+  bind(L_2TAG_PACKET_49_0_2);
+  movdl(xmm0, eax);
+  psllq(xmm0, 32);
+  pand(xmm0, xmm5);
+  subsd(xmm5, xmm0);
+  addsd(xmm5, xmm1);
+  mulsd(xmm0, xmm4);
+  mulsd(xmm5, xmm4);
+  addsd(xmm0, xmm5);
+
+  bind(L_2TAG_PACKET_50_0_2);
+  jmp(L_2TAG_PACKET_48_0_2);
+
+  bind(L_2TAG_PACKET_2_0_2);
+  movw(ecx, Address(rsp, 22));
+  movl(edx, INT_MIN);
+  movdl(xmm1, rdx);
+  xorpd(xmm7, xmm7);
+  paddd(xmm0, xmm4);
+  movdl(edx, xmm0);
+  psllq(xmm0, 29);
+  paddq(xmm1, xmm3);
+  pand(xmm5, xmm1);
+  andl(ecx, 32752);
+  cmpl(ecx, 16560);
+  jcc(Assembler::less, L_2TAG_PACKET_3_0_2);
+  pand(xmm0, xmm6);
+  subsd(xmm3, xmm5);
+  addl(eax, 16351);
+  shrl(eax, 4);
+  subl(eax, 1022);
+  cvtsi2sdl(xmm7, eax);
+  mulpd(xmm5, xmm0);
+  lea(r11, ExternalAddress(L_tbl));
+  movq(xmm4, ExternalAddress(coeff_h));    //0x00000000UL, 0xbfd61a00UL, 0x00000000UL, 0xbf5dabe1UL
+  mulsd(xmm3, xmm0);
+  movq(xmm6, ExternalAddress(coeff_h));    //0x00000000UL, 0xbfd61a00UL, 0x00000000UL, 0xbf5dabe1UL
+  subsd(xmm5, xmm2);
+  movq(xmm1, ExternalAddress(8 + coeff_h));    //0x00000000UL, 0xbf5dabe1UL
+  pshufd(xmm2, xmm3, 68);
+  unpcklpd(xmm5, xmm3);
+  addsd(xmm3, xmm5);
+  movq(xmm0, ExternalAddress(8 + coeff_h));    //0x00000000UL, 0xbf5dabe1UL
+  andl(edx, 16760832);
+  shrl(edx, 10);
+  addpd(xmm7, Address(tmp4, edx, Address::times_1, -3648));
+  mulsd(xmm4, xmm5);
+  mulsd(xmm0, xmm5);
+  mulsd(xmm6, xmm2);
+  mulsd(xmm1, xmm2);
+  movdqu(xmm2, xmm5);
+  mulsd(xmm4, xmm5);
+  addsd(xmm5, xmm0);
+  movdqu(xmm0, xmm7);
+  addsd(xmm2, xmm3);
+  addsd(xmm7, xmm5);
+  mulsd(xmm6, xmm2);
+  subsd(xmm0, xmm7);
+  movdqu(xmm2, xmm7);
+  addsd(xmm7, xmm4);
+  addsd(xmm0, xmm5);
+  subsd(xmm2, xmm7);
+  addsd(xmm4, xmm2);
+  pshufd(xmm2, xmm5, 238);
+  movdqu(xmm5, xmm7);
+  addsd(xmm7, xmm2);
+  addsd(xmm4, xmm0);
+  movdqu(xmm0, ExternalAddress(coeff));    //0x6dc96112UL, 0xbf836578UL, 0xee241472UL, 0xbf9b0301UL
+  subsd(xmm5, xmm7);
+  addsd(xmm6, xmm4);
+  movdqu(xmm4, xmm7);
+  addsd(xmm5, xmm2);
+  addsd(xmm7, xmm1);
+  movdqu(xmm2, ExternalAddress(64 + coeff));    //0x486ececcUL, 0x3fc4635eUL, 0x161bb241UL, 0xbf5dabe1UL
+  subsd(xmm4, xmm7);
+  addsd(xmm6, xmm5);
+  addsd(xmm4, xmm1);
+  pshufd(xmm5, xmm7, 238);
+  movapd(xmm1, xmm7);
+  addsd(xmm7, xmm5);
+  subsd(xmm1, xmm7);
+  addsd(xmm1, xmm5);
+  movdqu(xmm5, ExternalAddress(80 + coeff));    //0x9f95985aUL, 0xbfb528dbUL, 0xf8b5787dUL, 0x3ef2531eUL
+  pshufd(xmm3, xmm3, 68);
+  addsd(xmm6, xmm4);
+  addsd(xmm6, xmm1);
+  movdqu(xmm1, ExternalAddress(32 + coeff));    //0x9f95985aUL, 0xbfb528dbUL, 0xb3841d2aUL, 0xbfd619b6UL
+  mulpd(xmm0, xmm3);
+  mulpd(xmm2, xmm3);
+  pshufd(xmm4, xmm3, 68);
+  mulpd(xmm3, xmm3);
+  addpd(xmm0, xmm1);
+  addpd(xmm5, xmm2);
+  mulsd(xmm4, xmm3);
+  movq(xmm2, ExternalAddress(HIGHMASK_LOG_X));    //0xf8000000UL, 0xffffffffUL, 0x00000000UL, 0xfffff800UL
+  mulpd(xmm3, xmm3);
+  movq(xmm1, Address(rsp, 16));
+  movw(ecx, Address(rsp, 22));
+  mulpd(xmm0, xmm4);
+  pextrw(eax, xmm7, 3);
+  mulpd(xmm5, xmm4);
+  mulpd(xmm0, xmm3);
+  movq(xmm4, ExternalAddress(8 + HIGHMASK_Y));    //0x00000000UL, 0xffffffffUL
+  pand(xmm2, xmm7);
+  addsd(xmm5, xmm6);
+  subsd(xmm7, xmm2);
+  addpd(xmm5, xmm0);
+  andl(eax, 32752);
+  subl(eax, 16368);
+  andl(ecx, 32752);
+  cmpl(ecx, 32752);
+  jcc(Assembler::equal, L_2TAG_PACKET_45_0_2);
+  addl(ecx, eax);
+  cmpl(ecx, 16576);
+  jcc(Assembler::aboveEqual, L_2TAG_PACKET_51_0_2);
+  pshufd(xmm0, xmm5, 238);
+  pand(xmm4, xmm1);
+  movdqu(xmm3, xmm1);
+  addsd(xmm5, xmm0);
+  subsd(xmm1, xmm4);
+  xorpd(xmm6, xmm6);
+  movl(edx, 17080);
+  pinsrw(xmm6, edx, 3);
+  addsd(xmm7, xmm5);
+  mulsd(xmm4, xmm2);
+  mulsd(xmm1, xmm2);
+  movdqu(xmm5, xmm6);
+  mulsd(xmm3, xmm7);
+  addsd(xmm6, xmm4);
+  addsd(xmm1, xmm3);
+  movdqu(xmm7, ExternalAddress(e_coeff));    //0xe78a6731UL, 0x3f55d87fUL, 0xd704a0c0UL, 0x3fac6b08UL
+  movdl(edx, xmm6);
+  subsd(xmm6, xmm5);
+  lea(tmp4, ExternalAddress(T_exp));
+  movdqu(xmm3, ExternalAddress(16 + e_coeff));    //0x6fba4e77UL, 0x3f83b2abUL, 0xff82c58fUL, 0x3fcebfbdUL
+  movq(xmm2, ExternalAddress(32 + e_coeff));    //0xfefa39efUL, 0x3fe62e42UL, 0x00000000UL, 0x00000000UL
+  subsd(xmm4, xmm6);
+  movl(ecx, edx);
+  andl(edx, 255);
+  addl(edx, edx);
+  movdqu(xmm5, Address(tmp4, edx, Address::times_8, 0));
+  addsd(xmm4, xmm1);
+  pextrw(edx, xmm6, 3);
+  shrl(ecx, 8);
+  movl(eax, ecx);
+  shrl(ecx, 1);
+  subl(eax, ecx);
+  shll(ecx, 20);
+  movdl(xmm6, ecx);
+  pshufd(xmm0, xmm4, 68);
+  pshufd(xmm1, xmm4, 68);
+  mulpd(xmm0, xmm0);
+  mulpd(xmm7, xmm1);
+  pshufd(xmm6, xmm6, 17);
+  mulsd(xmm2, xmm4);
+  andl(edx, 32767);
+  cmpl(edx, 16529);
+  jcc(Assembler::above, L_2TAG_PACKET_12_0_2);
+  mulsd(xmm0, xmm0);
+  paddd(xmm5, xmm6);
+  addpd(xmm3, xmm7);
+  mulsd(xmm2, xmm5);
+  pshufd(xmm6, xmm5, 238);
+  mulpd(xmm0, xmm3);
+  addsd(xmm2, xmm6);
+  pshufd(xmm3, xmm0, 238);
+  addl(eax, 1023);
+  shll(eax, 20);
+  orl(eax, tmp1);
+  movdl(xmm4, eax);
+  mulsd(xmm0, xmm5);
+  mulsd(xmm3, xmm5);
+  addsd(xmm0, xmm2);
+  psllq(xmm4, 32);
+  addsd(xmm0, xmm3);
+  movdqu(xmm1, xmm0);
+  addsd(xmm0, xmm5);
+  mulsd(xmm0, xmm4);
+  pextrw(eax, xmm0, 3);
+  andl(eax, 32752);
+  jcc(Assembler::equal, L_2TAG_PACKET_13_0_2);
+  cmpl(eax, 32752);
+  jcc(Assembler::equal, L_2TAG_PACKET_14_0_2);
+
+  bind(L_2TAG_PACKET_52_0_2);
+  jmp(B1_5);
+
+  bind(L_2TAG_PACKET_45_0_2);
+  movq(xmm0, Address(rsp, 8));
+  xorpd(xmm2, xmm2);
+  movl(eax, 49136);
+  pinsrw(xmm2, eax, 3);
+  addsd(xmm2, xmm0);
+  pextrw(eax, xmm2, 3);
+  cmpl(eax, 0);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_53_0_2);
+  xorpd(xmm0, xmm0);
+  movl(eax, 32760);
+  pinsrw(xmm0, eax, 3);
+  jmp(B1_5);
+
+  bind(L_2TAG_PACKET_53_0_2);
+  movq(xmm1, Address(rsp, 16));
+  movdl(edx, xmm1);
+  movdqu(xmm3, xmm1);
+  psrlq(xmm3, 20);
+  movdl(ecx, xmm3);
+  orl(ecx, edx);
+  jcc(Assembler::equal, L_2TAG_PACKET_54_0_2);
+  addsd(xmm1, xmm1);
+  movdqu(xmm0, xmm1);
+  jmp(B1_5);
+
+  bind(L_2TAG_PACKET_51_0_2);
+  pextrw(eax, xmm1, 3);
+  pextrw(ecx, xmm2, 3);
+  xorl(eax, ecx);
+  testl(eax, 32768);
+  jcc(Assembler::equal, L_2TAG_PACKET_47_0_2);
+  jmp(L_2TAG_PACKET_46_0_2);
+
+  bind(L_2TAG_PACKET_54_0_2);
+  pextrw(eax, xmm0, 3);
+  andl(eax, 32752);
+  pextrw(edx, xmm1, 3);
+  xorpd(xmm0, xmm0);
+  subl(eax, 16368);
+  xorl(eax, edx);
+  testl(eax, 32768);
+  jcc(Assembler::equal, L_2TAG_PACKET_55_0_2);
+  jmp(B1_5);
+
+  bind(L_2TAG_PACKET_55_0_2);
+  movl(edx, 32752);
+  pinsrw(xmm0, edx, 3);
+  jmp(B1_5);
+
+  bind(L_2TAG_PACKET_17_0_2);
+  movq(Address(rsp, 24), xmm0);
+
+  bind(B1_3);
+  movq(xmm0, Address(rsp, 24));
+
+  bind(L_2TAG_PACKET_56_0_2);
+
+  bind(B1_5);
+  addq(rsp, 40);
+}
+
+/******************************************************************************/
+//                     ALGORITHM DESCRIPTION - SIN()
+//                     ---------------------
+//
+//     1. RANGE REDUCTION
+//
+//     We perform an initial range reduction from X to r with
+//
+//          X =~= N * pi/32 + r
+//
+//     so that |r| <= pi/64 + epsilon. We restrict inputs to those
+//     where |N| <= 932560. Beyond this, the range reduction is
+//     insufficiently accurate. For extremely small inputs,
+//     denormalization can occur internally, impacting performance.
+//     This means that the main path is actually only taken for
+//     2^-252 <= |X| < 90112.
+//
+//     To avoid branches, we perform the range reduction to full
+//     accuracy each time.
+//
+//          X - N * (P_1 + P_2 + P_3)
+//
+//     where P_1 and P_2 are 32-bit numbers (so multiplication by N
+//     is exact) and P_3 is a 53-bit number. Together, these
+//     approximate pi well enough for all cases in the restricted
+//     range.
+//
+//     The main reduction sequence is:
+//
+//             y = 32/pi * x
+//             N = integer(y)
+//     (computed by adding and subtracting off SHIFTER)
+//
+//             m_1 = N * P_1
+//             m_2 = N * P_2
+//             r_1 = x - m_1
+//             r = r_1 - m_2
+//     (this r can be used for most of the calculation)
+//
+//             c_1 = r_1 - r
+//             m_3 = N * P_3
+//             c_2 = c_1 - m_2
+//             c = c_2 - m_3
+//
+//     2. MAIN ALGORITHM
+//
+//     The algorithm uses a table lookup based on B = M * pi / 32
+//     where M = N mod 64. The stored values are:
+//       sigma             closest power of 2 to cos(B)
+//       C_hl              53-bit cos(B) - sigma
+//       S_hi + S_lo       2 * 53-bit sin(B)
+//
+//     The computation is organized as follows:
+//
+//          sin(B + r + c) = [sin(B) + sigma * r] +
+//                           r * (cos(B) - sigma) +
+//                           sin(B) * [cos(r + c) - 1] +
+//                           cos(B) * [sin(r + c) - r]
+//
+//     which is approximately:
+//
+//          [S_hi + sigma * r] +
+//          C_hl * r +
+//          S_lo + S_hi * [(cos(r) - 1) - r * c] +
+//          (C_hl + sigma) * [(sin(r) - r) + c]
+//
+//     and this is what is actually computed. We separate this sum
+//     into four parts:
+//
+//          hi + med + pols + corr
+//
+//     where
+//
+//          hi       = S_hi + sigma r
+//          med      = C_hl * r
+//          pols     = S_hi * (cos(r) - 1) + (C_hl + sigma) * (sin(r) - r)
+//          corr     = S_lo + c * ((C_hl + sigma) - S_hi * r)
+//
+//     3. POLYNOMIAL
+//
+//     The polynomial S_hi * (cos(r) - 1) + (C_hl + sigma) *
+//     (sin(r) - r) can be rearranged freely, since it is quite
+//     small, so we exploit parallelism to the fullest.
+//
+//          psc4       =   SC_4 * r_1
+//          msc4       =   psc4 * r
+//          r2         =   r * r
+//          msc2       =   SC_2 * r2
+//          r4         =   r2 * r2
+//          psc3       =   SC_3 + msc4
+//          psc1       =   SC_1 + msc2
+//          msc3       =   r4 * psc3
+//          sincospols =   psc1 + msc3
+//          pols       =   sincospols *
+//                         <S_hi * r^2 | (C_hl + sigma) * r^3>
+//
+//     4. CORRECTION TERM
+//
+//     This is where the "c" component of the range reduction is
+//     taken into account; recall that just "r" is used for most of
+//     the calculation.
+//
+//          -c   = m_3 - c_2
+//          -d   = S_hi * r - (C_hl + sigma)
+//          corr = -c * -d + S_lo
+//
+//     5. COMPENSATED SUMMATIONS
+//
+//     The two successive compensated summations add up the high
+//     and medium parts, leaving just the low parts to add up at
+//     the end.
+//
+//          rs        =  sigma * r
+//          res_int   =  S_hi + rs
+//          k_0       =  S_hi - res_int
+//          k_2       =  k_0 + rs
+//          med       =  C_hl * r
+//          res_hi    =  res_int + med
+//          k_1       =  res_int - res_hi
+//          k_3       =  k_1 + med
+//
+//     6. FINAL SUMMATION
+//
+//     We now add up all the small parts:
+//
+//          res_lo = pols(hi) + pols(lo) + corr + k_1 + k_3
+//
+//     Now the overall result is just:
+//
+//          res_hi + res_lo
+//
+//     7. SMALL ARGUMENTS
+//
+//     If |x| < SNN (SNN meaning the smallest normal number), we
+//     simply perform 0.1111111 cdots 1111 * x. For SNN <= |x|, we
+//     do 2^-55 * (2^55 * x - x).
+//
+// Special cases:
+//  sin(NaN) = quiet NaN, and raise invalid exception
+//  sin(INF) = NaN and raise invalid exception
+//  sin(+/-0) = +/-0
+//
+/******************************************************************************/
+
+ALIGNED_(16) juint _ONEHALF[] =
+{
+    0x00000000UL, 0x3fe00000UL, 0x00000000UL, 0x3fe00000UL
+};
+
+ALIGNED_(16) juint _P_2[] =
+{
+    0x1a600000UL, 0x3d90b461UL, 0x1a600000UL, 0x3d90b461UL
+};
+
+ALIGNED_(16) juint _SC_4[] =
+{
+    0xa556c734UL, 0x3ec71de3UL, 0x1a01a01aUL, 0x3efa01a0UL
+};
+
+ALIGNED_(16) juint _Ctable[] =
+{
+    0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
+    0x00000000UL, 0x00000000UL, 0x3ff00000UL, 0x176d6d31UL, 0xbf73b92eUL,
+    0xbc29b42cUL, 0x3fb917a6UL, 0xe0000000UL, 0xbc3e2718UL, 0x00000000UL,
+    0x3ff00000UL, 0x011469fbUL, 0xbf93ad06UL, 0x3c69a60bUL, 0x3fc8f8b8UL,
+    0xc0000000UL, 0xbc626d19UL, 0x00000000UL, 0x3ff00000UL, 0x939d225aUL,
+    0xbfa60beaUL, 0x2ed59f06UL, 0x3fd29406UL, 0xa0000000UL, 0xbc75d28dUL,
+    0x00000000UL, 0x3ff00000UL, 0x866b95cfUL, 0xbfb37ca1UL, 0xa6aea963UL,
+    0x3fd87de2UL, 0xe0000000UL, 0xbc672cedUL, 0x00000000UL, 0x3ff00000UL,
+    0x73fa1279UL, 0xbfbe3a68UL, 0x3806f63bUL, 0x3fde2b5dUL, 0x20000000UL,
+    0x3c5e0d89UL, 0x00000000UL, 0x3ff00000UL, 0x5bc57974UL, 0xbfc59267UL,
+    0x39ae68c8UL, 0x3fe1c73bUL, 0x20000000UL, 0x3c8b25ddUL, 0x00000000UL,
+    0x3ff00000UL, 0x53aba2fdUL, 0xbfcd0dfeUL, 0x25091dd6UL, 0x3fe44cf3UL,
+    0x20000000UL, 0x3c68076aUL, 0x00000000UL, 0x3ff00000UL, 0x99fcef32UL,
+    0x3fca8279UL, 0x667f3bcdUL, 0x3fe6a09eUL, 0x20000000UL, 0xbc8bdd34UL,
+    0x00000000UL, 0x3fe00000UL, 0x94247758UL, 0x3fc133ccUL, 0x6b151741UL,
+    0x3fe8bc80UL, 0x20000000UL, 0xbc82c5e1UL, 0x00000000UL, 0x3fe00000UL,
+    0x9ae68c87UL, 0x3fac73b3UL, 0x290ea1a3UL, 0x3fea9b66UL, 0xe0000000UL,
+    0x3c39f630UL, 0x00000000UL, 0x3fe00000UL, 0x7f909c4eUL, 0xbf9d4a2cUL,
+    0xf180bdb1UL, 0x3fec38b2UL, 0x80000000UL, 0xbc76e0b1UL, 0x00000000UL,
+    0x3fe00000UL, 0x65455a75UL, 0xbfbe0875UL, 0xcf328d46UL, 0x3fed906bUL,
+    0x20000000UL, 0x3c7457e6UL, 0x00000000UL, 0x3fe00000UL, 0x76acf82dUL,
+    0x3fa4a031UL, 0x56c62ddaUL, 0x3fee9f41UL, 0xe0000000UL, 0x3c8760b1UL,
+    0x00000000UL, 0x3fd00000UL, 0x0e5967d5UL, 0xbfac1d1fUL, 0xcff75cb0UL,
+    0x3fef6297UL, 0x20000000UL, 0x3c756217UL, 0x00000000UL, 0x3fd00000UL,
+    0x0f592f50UL, 0xbf9ba165UL, 0xa3d12526UL, 0x3fefd88dUL, 0x40000000UL,
+    0xbc887df6UL, 0x00000000UL, 0x3fc00000UL, 0x00000000UL, 0x00000000UL,
+    0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
+    0x00000000UL, 0x0f592f50UL, 0x3f9ba165UL, 0xa3d12526UL, 0x3fefd88dUL,
+    0x40000000UL, 0xbc887df6UL, 0x00000000UL, 0xbfc00000UL, 0x0e5967d5UL,
+    0x3fac1d1fUL, 0xcff75cb0UL, 0x3fef6297UL, 0x20000000UL, 0x3c756217UL,
+    0x00000000UL, 0xbfd00000UL, 0x76acf82dUL, 0xbfa4a031UL, 0x56c62ddaUL,
+    0x3fee9f41UL, 0xe0000000UL, 0x3c8760b1UL, 0x00000000UL, 0xbfd00000UL,
+    0x65455a75UL, 0x3fbe0875UL, 0xcf328d46UL, 0x3fed906bUL, 0x20000000UL,
+    0x3c7457e6UL, 0x00000000UL, 0xbfe00000UL, 0x7f909c4eUL, 0x3f9d4a2cUL,
+    0xf180bdb1UL, 0x3fec38b2UL, 0x80000000UL, 0xbc76e0b1UL, 0x00000000UL,
+    0xbfe00000UL, 0x9ae68c87UL, 0xbfac73b3UL, 0x290ea1a3UL, 0x3fea9b66UL,
+    0xe0000000UL, 0x3c39f630UL, 0x00000000UL, 0xbfe00000UL, 0x94247758UL,
+    0xbfc133ccUL, 0x6b151741UL, 0x3fe8bc80UL, 0x20000000UL, 0xbc82c5e1UL,
+    0x00000000UL, 0xbfe00000UL, 0x99fcef32UL, 0xbfca8279UL, 0x667f3bcdUL,
+    0x3fe6a09eUL, 0x20000000UL, 0xbc8bdd34UL, 0x00000000UL, 0xbfe00000UL,
+    0x53aba2fdUL, 0x3fcd0dfeUL, 0x25091dd6UL, 0x3fe44cf3UL, 0x20000000UL,
+    0x3c68076aUL, 0x00000000UL, 0xbff00000UL, 0x5bc57974UL, 0x3fc59267UL,
+    0x39ae68c8UL, 0x3fe1c73bUL, 0x20000000UL, 0x3c8b25ddUL, 0x00000000UL,
+    0xbff00000UL, 0x73fa1279UL, 0x3fbe3a68UL, 0x3806f63bUL, 0x3fde2b5dUL,
+    0x20000000UL, 0x3c5e0d89UL, 0x00000000UL, 0xbff00000UL, 0x866b95cfUL,
+    0x3fb37ca1UL, 0xa6aea963UL, 0x3fd87de2UL, 0xe0000000UL, 0xbc672cedUL,
+    0x00000000UL, 0xbff00000UL, 0x939d225aUL, 0x3fa60beaUL, 0x2ed59f06UL,
+    0x3fd29406UL, 0xa0000000UL, 0xbc75d28dUL, 0x00000000UL, 0xbff00000UL,
+    0x011469fbUL, 0x3f93ad06UL, 0x3c69a60bUL, 0x3fc8f8b8UL, 0xc0000000UL,
+    0xbc626d19UL, 0x00000000UL, 0xbff00000UL, 0x176d6d31UL, 0x3f73b92eUL,
+    0xbc29b42cUL, 0x3fb917a6UL, 0xe0000000UL, 0xbc3e2718UL, 0x00000000UL,
+    0xbff00000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
+    0x00000000UL, 0x00000000UL, 0x00000000UL, 0xbff00000UL, 0x176d6d31UL,
+    0x3f73b92eUL, 0xbc29b42cUL, 0xbfb917a6UL, 0xe0000000UL, 0x3c3e2718UL,
+    0x00000000UL, 0xbff00000UL, 0x011469fbUL, 0x3f93ad06UL, 0x3c69a60bUL,
+    0xbfc8f8b8UL, 0xc0000000UL, 0x3c626d19UL, 0x00000000UL, 0xbff00000UL,
+    0x939d225aUL, 0x3fa60beaUL, 0x2ed59f06UL, 0xbfd29406UL, 0xa0000000UL,
+    0x3c75d28dUL, 0x00000000UL, 0xbff00000UL, 0x866b95cfUL, 0x3fb37ca1UL,
+    0xa6aea963UL, 0xbfd87de2UL, 0xe0000000UL, 0x3c672cedUL, 0x00000000UL,
+    0xbff00000UL, 0x73fa1279UL, 0x3fbe3a68UL, 0x3806f63bUL, 0xbfde2b5dUL,
+    0x20000000UL, 0xbc5e0d89UL, 0x00000000UL, 0xbff00000UL, 0x5bc57974UL,
+    0x3fc59267UL, 0x39ae68c8UL, 0xbfe1c73bUL, 0x20000000UL, 0xbc8b25ddUL,
+    0x00000000UL, 0xbff00000UL, 0x53aba2fdUL, 0x3fcd0dfeUL, 0x25091dd6UL,
+    0xbfe44cf3UL, 0x20000000UL, 0xbc68076aUL, 0x00000000UL, 0xbff00000UL,
+    0x99fcef32UL, 0xbfca8279UL, 0x667f3bcdUL, 0xbfe6a09eUL, 0x20000000UL,
+    0x3c8bdd34UL, 0x00000000UL, 0xbfe00000UL, 0x94247758UL, 0xbfc133ccUL,
+    0x6b151741UL, 0xbfe8bc80UL, 0x20000000UL, 0x3c82c5e1UL, 0x00000000UL,
+    0xbfe00000UL, 0x9ae68c87UL, 0xbfac73b3UL, 0x290ea1a3UL, 0xbfea9b66UL,
+    0xe0000000UL, 0xbc39f630UL, 0x00000000UL, 0xbfe00000UL, 0x7f909c4eUL,
+    0x3f9d4a2cUL, 0xf180bdb1UL, 0xbfec38b2UL, 0x80000000UL, 0x3c76e0b1UL,
+    0x00000000UL, 0xbfe00000UL, 0x65455a75UL, 0x3fbe0875UL, 0xcf328d46UL,
+    0xbfed906bUL, 0x20000000UL, 0xbc7457e6UL, 0x00000000UL, 0xbfe00000UL,
+    0x76acf82dUL, 0xbfa4a031UL, 0x56c62ddaUL, 0xbfee9f41UL, 0xe0000000UL,
+    0xbc8760b1UL, 0x00000000UL, 0xbfd00000UL, 0x0e5967d5UL, 0x3fac1d1fUL,
+    0xcff75cb0UL, 0xbfef6297UL, 0x20000000UL, 0xbc756217UL, 0x00000000UL,
+    0xbfd00000UL, 0x0f592f50UL, 0x3f9ba165UL, 0xa3d12526UL, 0xbfefd88dUL,
+    0x40000000UL, 0x3c887df6UL, 0x00000000UL, 0xbfc00000UL, 0x00000000UL,
+    0x00000000UL, 0x00000000UL, 0xbff00000UL, 0x00000000UL, 0x00000000UL,
+    0x00000000UL, 0x00000000UL, 0x0f592f50UL, 0xbf9ba165UL, 0xa3d12526UL,
+    0xbfefd88dUL, 0x40000000UL, 0x3c887df6UL, 0x00000000UL, 0x3fc00000UL,
+    0x0e5967d5UL, 0xbfac1d1fUL, 0xcff75cb0UL, 0xbfef6297UL, 0x20000000UL,
+    0xbc756217UL, 0x00000000UL, 0x3fd00000UL, 0x76acf82dUL, 0x3fa4a031UL,
+    0x56c62ddaUL, 0xbfee9f41UL, 0xe0000000UL, 0xbc8760b1UL, 0x00000000UL,
+    0x3fd00000UL, 0x65455a75UL, 0xbfbe0875UL, 0xcf328d46UL, 0xbfed906bUL,
+    0x20000000UL, 0xbc7457e6UL, 0x00000000UL, 0x3fe00000UL, 0x7f909c4eUL,
+    0xbf9d4a2cUL, 0xf180bdb1UL, 0xbfec38b2UL, 0x80000000UL, 0x3c76e0b1UL,
+    0x00000000UL, 0x3fe00000UL, 0x9ae68c87UL, 0x3fac73b3UL, 0x290ea1a3UL,
+    0xbfea9b66UL, 0xe0000000UL, 0xbc39f630UL, 0x00000000UL, 0x3fe00000UL,
+    0x94247758UL, 0x3fc133ccUL, 0x6b151741UL, 0xbfe8bc80UL, 0x20000000UL,
+    0x3c82c5e1UL, 0x00000000UL, 0x3fe00000UL, 0x99fcef32UL, 0x3fca8279UL,
+    0x667f3bcdUL, 0xbfe6a09eUL, 0x20000000UL, 0x3c8bdd34UL, 0x00000000UL,
+    0x3fe00000UL, 0x53aba2fdUL, 0xbfcd0dfeUL, 0x25091dd6UL, 0xbfe44cf3UL,
+    0x20000000UL, 0xbc68076aUL, 0x00000000UL, 0x3ff00000UL, 0x5bc57974UL,
+    0xbfc59267UL, 0x39ae68c8UL, 0xbfe1c73bUL, 0x20000000UL, 0xbc8b25ddUL,
+    0x00000000UL, 0x3ff00000UL, 0x73fa1279UL, 0xbfbe3a68UL, 0x3806f63bUL,
+    0xbfde2b5dUL, 0x20000000UL, 0xbc5e0d89UL, 0x00000000UL, 0x3ff00000UL,
+    0x866b95cfUL, 0xbfb37ca1UL, 0xa6aea963UL, 0xbfd87de2UL, 0xe0000000UL,
+    0x3c672cedUL, 0x00000000UL, 0x3ff00000UL, 0x939d225aUL, 0xbfa60beaUL,
+    0x2ed59f06UL, 0xbfd29406UL, 0xa0000000UL, 0x3c75d28dUL, 0x00000000UL,
+    0x3ff00000UL, 0x011469fbUL, 0xbf93ad06UL, 0x3c69a60bUL, 0xbfc8f8b8UL,
+    0xc0000000UL, 0x3c626d19UL, 0x00000000UL, 0x3ff00000UL, 0x176d6d31UL,
+    0xbf73b92eUL, 0xbc29b42cUL, 0xbfb917a6UL, 0xe0000000UL, 0x3c3e2718UL,
+    0x00000000UL, 0x3ff00000UL
+};
+
+ALIGNED_(16) juint _SC_2[] =
+{
+    0x11111111UL, 0x3f811111UL, 0x55555555UL, 0x3fa55555UL
+};
+
+ALIGNED_(16) juint _SC_3[] =
+{
+    0x1a01a01aUL, 0xbf2a01a0UL, 0x16c16c17UL, 0xbf56c16cUL
+};
+
+ALIGNED_(16) juint _SC_1[] =
+{
+    0x55555555UL, 0xbfc55555UL, 0x00000000UL, 0xbfe00000UL
+};
+
+ALIGNED_(16) juint _PI_INV_TABLE[] =
+{
+    0x00000000UL, 0x00000000UL, 0xa2f9836eUL, 0x4e441529UL, 0xfc2757d1UL,
+    0xf534ddc0UL, 0xdb629599UL, 0x3c439041UL, 0xfe5163abUL, 0xdebbc561UL,
+    0xb7246e3aUL, 0x424dd2e0UL, 0x06492eeaUL, 0x09d1921cUL, 0xfe1deb1cUL,
+    0xb129a73eUL, 0xe88235f5UL, 0x2ebb4484UL, 0xe99c7026UL, 0xb45f7e41UL,
+    0x3991d639UL, 0x835339f4UL, 0x9c845f8bUL, 0xbdf9283bUL, 0x1ff897ffUL,
+    0xde05980fUL, 0xef2f118bUL, 0x5a0a6d1fUL, 0x6d367ecfUL, 0x27cb09b7UL,
+    0x4f463f66UL, 0x9e5fea2dUL, 0x7527bac7UL, 0xebe5f17bUL, 0x3d0739f7UL,
+    0x8a5292eaUL, 0x6bfb5fb1UL, 0x1f8d5d08UL, 0x56033046UL, 0xfc7b6babUL,
+    0xf0cfbc21UL
+};
+
+ALIGNED_(8) juint _PI_4[] =
+{
+    0x40000000UL, 0x3fe921fbUL, 0x18469899UL, 0x3e64442dUL
+};
+
+ALIGNED_(8) juint _PI32INV[] =
+{
+    0x6dc9c883UL, 0x40245f30UL
+};
+
+ALIGNED_(8) juint _SHIFTER[] =
+{
+    0x00000000UL, 0x43380000UL
+};
+
+ALIGNED_(8) juint _SIGN_MASK[] =
+{
+    0x00000000UL, 0x80000000UL
+};
+
+ALIGNED_(8) juint _P_3[] =
+{
+    0x2e037073UL, 0x3b63198aUL
+};
+
+ALIGNED_(8) juint _ALL_ONES[] =
+{
+    0xffffffffUL, 0x3fefffffUL
+};
+
+ALIGNED_(8) juint _TWO_POW_55[] =
+{
+    0x00000000UL, 0x43600000UL
+};
+
+ALIGNED_(8) juint _TWO_POW_M55[] =
+{
+    0x00000000UL, 0x3c800000ULL
+};
+
+ALIGNED_(8) juint _P_1[] =
+{
+    0x54400000UL, 0x3fb921fbUL
+};
+
+ALIGNED_(8) juint _NEG_ZERO[] =
+{
+    0x00000000UL, 0x80000000UL
+};
+
+void MacroAssembler::fast_sin(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ebx, Register ecx, Register edx, Register tmp1, Register tmp2, Register tmp3, Register tmp4) {
+  Label L_2TAG_PACKET_0_0_1, L_2TAG_PACKET_1_0_1, L_2TAG_PACKET_2_0_1, L_2TAG_PACKET_3_0_1;
+  Label L_2TAG_PACKET_4_0_1, L_2TAG_PACKET_5_0_1, L_2TAG_PACKET_6_0_1, L_2TAG_PACKET_7_0_1;
+  Label L_2TAG_PACKET_8_0_1, L_2TAG_PACKET_9_0_1, L_2TAG_PACKET_10_0_1, L_2TAG_PACKET_11_0_1;
+  Label L_2TAG_PACKET_13_0_1, L_2TAG_PACKET_14_0_1;
+  Label L_2TAG_PACKET_12_0_1, B1_1, B1_2, B1_4, start;
+
+  assert_different_registers(tmp1, tmp2, tmp3, tmp4, eax, ebx, ecx, edx);
+  address ONEHALF = (address)_ONEHALF;
+  address P_2 = (address)_P_2;
+  address SC_4 = (address)_SC_4;
+  address Ctable = (address)_Ctable;
+  address SC_2 = (address)_SC_2;
+  address SC_3 = (address)_SC_3;
+  address SC_1 = (address)_SC_1;
+  address PI_INV_TABLE = (address)_PI_INV_TABLE;
+  address PI_4 = (address)_PI_4;
+  address PI32INV = (address)_PI32INV;
+  address SHIFTER = (address)_SHIFTER;
+  address SIGN_MASK = (address)_SIGN_MASK;
+  address P_3 = (address)_P_3;
+  address ALL_ONES = (address)_ALL_ONES;
+  address TWO_POW_55 = (address)_TWO_POW_55;
+  address TWO_POW_M55 = (address)_TWO_POW_M55;
+  address P_1 = (address)_P_1;
+  address NEG_ZERO = (address)_NEG_ZERO;
+
+  bind(start);
+  push(rbx);
+  subq(rsp, 16);
+  movsd(Address(rsp, 8), xmm0);
+  movl(eax, Address(rsp, 12));
+  movq(xmm1, ExternalAddress(PI32INV));    //0x6dc9c883UL, 0x40245f30UL
+  movq(xmm2, ExternalAddress(SHIFTER));    //0x00000000UL, 0x43380000UL
+  andl(eax, 2147418112);
+  subl(eax, 808452096);
+  cmpl(eax, 281346048);
+  jcc(Assembler::above, L_2TAG_PACKET_0_0_1);
+  mulsd(xmm1, xmm0);
+  movdqu(xmm5, ExternalAddress(ONEHALF));    //0x00000000UL, 0x3fe00000UL, 0x00000000UL, 0x3fe00000UL
+  movq(xmm4, ExternalAddress(SIGN_MASK));    //0x00000000UL, 0x80000000UL
+  pand(xmm4, xmm0);
+  por(xmm5, xmm4);
+  addpd(xmm1, xmm5);
+  cvttsd2sil(edx, xmm1);
+  cvtsi2sdl(xmm1, edx);
+  movdqu(xmm6, ExternalAddress(P_2));    //0x1a600000UL, 0x3d90b461UL, 0x1a600000UL, 0x3d90b461UL
+  mov64(r8, 0x3fb921fb54400000);
+  movdq(xmm3, r8);
+  movdqu(xmm5, ExternalAddress(SC_4));    //0xa556c734UL, 0x3ec71de3UL, 0x1a01a01aUL, 0x3efa01a0UL
+  pshufd(xmm4, xmm0, 68);
+  mulsd(xmm3, xmm1);
+  movddup(xmm1, xmm1);
+  andl(edx, 63);
+  shll(edx, 5);
+  lea(rax, ExternalAddress(Ctable));
+  addq(rax, rdx);
+  mulpd(xmm6, xmm1);
+  mulsd(xmm1, ExternalAddress(P_3));    //0x2e037073UL, 0x3b63198aUL
+  subsd(xmm4, xmm3);
+  movq(xmm7, Address(rax, 8));
+  subsd(xmm0, xmm3);
+  movddup(xmm3, xmm4);
+  subsd(xmm4, xmm6);
+  pshufd(xmm0, xmm0, 68);
+  movdqu(xmm2, Address(rax, 0));
+  mulpd(xmm5, xmm0);
+  subpd(xmm0, xmm6);
+  mulsd(xmm7, xmm4);
+  subsd(xmm3, xmm4);
+  mulpd(xmm5, xmm0);
+  mulpd(xmm0, xmm0);
+  subsd(xmm3, xmm6);
+  movdqu(xmm6, ExternalAddress(SC_2));    //0x11111111UL, 0x3f811111UL, 0x55555555UL, 0x3fa55555UL
+  subsd(xmm1, xmm3);
+  movq(xmm3, Address(rax, 24));
+  addsd(xmm2, xmm3);
+  subsd(xmm7, xmm2);
+  mulsd(xmm2, xmm4);
+  mulpd(xmm6, xmm0);
+  mulsd(xmm3, xmm4);
+  mulpd(xmm2, xmm0);
+  mulpd(xmm0, xmm0);
+  addpd(xmm5, ExternalAddress(SC_3));    //0x1a01a01aUL, 0xbf2a01a0UL, 0x16c16c17UL, 0xbf56c16cUL
+  mulsd(xmm4, Address(rax, 0));
+  addpd(xmm6, ExternalAddress(SC_1));    //0x55555555UL, 0xbfc55555UL, 0x00000000UL, 0xbfe00000UL
+  mulpd(xmm5, xmm0);
+  movdqu(xmm0, xmm3);
+  addsd(xmm3, Address(rax, 8));
+  mulpd(xmm1, xmm7);
+  movdqu(xmm7, xmm4);
+  addsd(xmm4, xmm3);
+  addpd(xmm6, xmm5);
+  movq(xmm5, Address(rax, 8));
+  subsd(xmm5, xmm3);
+  subsd(xmm3, xmm4);
+  addsd(xmm1, Address(rax, 16));
+  mulpd(xmm6, xmm2);
+  addsd(xmm5, xmm0);
+  addsd(xmm3, xmm7);
+  addsd(xmm1, xmm5);
+  addsd(xmm1, xmm3);
+  addsd(xmm1, xmm6);
+  unpckhpd(xmm6, xmm6);
+  movdqu(xmm0, xmm4);
+  addsd(xmm1, xmm6);
+  addsd(xmm0, xmm1);
+  jmp(B1_4);
+
+  bind(L_2TAG_PACKET_0_0_1);
+  jcc(Assembler::greater, L_2TAG_PACKET_1_0_1);
+  shrl(eax, 20);
+  cmpl(eax, 3325);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_2_0_1);
+  mulsd(xmm0, ExternalAddress(ALL_ONES));    //0xffffffffUL, 0x3fefffffUL
+  jmp(B1_4);
+
+  bind(L_2TAG_PACKET_2_0_1);
+  movq(xmm3, ExternalAddress(TWO_POW_55));    //0x00000000UL, 0x43600000UL
+  mulsd(xmm3, xmm0);
+  subsd(xmm3, xmm0);
+  mulsd(xmm3, ExternalAddress(TWO_POW_M55));    //0x00000000UL, 0x3c800000UL
+  jmp(B1_4);
+
+  bind(L_2TAG_PACKET_1_0_1);
+  pextrw(eax, xmm0, 3);
+  andl(eax, 32752);
+  cmpl(eax, 32752);
+  jcc(Assembler::equal, L_2TAG_PACKET_3_0_1);
+  pextrw(ecx, xmm0, 3);
+  andl(ecx, 32752);
+  subl(ecx, 16224);
+  shrl(ecx, 7);
+  andl(ecx, 65532);
+  lea(r11, ExternalAddress(PI_INV_TABLE));
+  addq(rcx, r11);
+  movdq(rax, xmm0);
+  movl(r10, Address(rcx, 20));
+  movl(r8, Address(rcx, 24));
+  movl(edx, eax);
+  shrq(rax, 21);
+  orl(eax, INT_MIN);
+  shrl(eax, 11);
+  movl(r9, r10);
+  imulq(r10, rdx);
+  imulq(r9, rax);
+  imulq(r8, rax);
+  movl(rsi, Address(rcx, 16));
+  movl(rdi, Address(rcx, 12));
+  movl(r11, r10);
+  shrq(r10, 32);
+  addq(r9, r10);
+  addq(r11, r8);
+  movl(r8, r11);
+  shrq(r11, 32);
+  addq(r9, r11);
+  movl(r10, rsi);
+  imulq(rsi, rdx);
+  imulq(r10, rax);
+  movl(r11, rdi);
+  imulq(rdi, rdx);
+  movl(ebx, rsi);
+  shrq(rsi, 32);
+  addq(r9, rbx);
+  movl(ebx, r9);
+  shrq(r9, 32);
+  addq(r10, rsi);
+  addq(r10, r9);
+  shlq(rbx, 32);
+  orq(r8, rbx);
+  imulq(r11, rax);
+  movl(r9, Address(rcx, 8));
+  movl(rsi, Address(rcx, 4));
+  movl(ebx, rdi);
+  shrq(rdi, 32);
+  addq(r10, rbx);
+  movl(ebx, r10);
+  shrq(r10, 32);
+  addq(r11, rdi);
+  addq(r11, r10);
+  movq(rdi, r9);
+  imulq(r9, rdx);
+  imulq(rdi, rax);
+  movl(r10, r9);
+  shrq(r9, 32);
+  addq(r11, r10);
+  movl(r10, r11);
+  shrq(r11, 32);
+  addq(rdi, r9);
+  addq(rdi, r11);
+  movq(r9, rsi);
+  imulq(rsi, rdx);
+  imulq(r9, rax);
+  shlq(r10, 32);
+  orq(r10, rbx);
+  movl(eax, Address(rcx, 0));
+  movl(r11, rsi);
+  shrq(rsi, 32);
+  addq(rdi, r11);
+  movl(r11, rdi);
+  shrq(rdi, 32);
+  addq(r9, rsi);
+  addq(r9, rdi);
+  imulq(rdx, rax);
+  pextrw(ebx, xmm0, 3);
+  lea(rdi, ExternalAddress(PI_INV_TABLE));
+  subq(rcx, rdi);
+  addl(ecx, ecx);
+  addl(ecx, ecx);
+  addl(ecx, ecx);
+  addl(ecx, 19);
+  movl(rsi, 32768);
+  andl(rsi, ebx);
+  shrl(ebx, 4);
+  andl(ebx, 2047);
+  subl(ebx, 1023);
+  subl(ecx, ebx);
+  addq(r9, rdx);
+  movl(edx, ecx);
+  addl(edx, 32);
+  cmpl(ecx, 1);
+  jcc(Assembler::less, L_2TAG_PACKET_4_0_1);
+  negl(ecx);
+  addl(ecx, 29);
+  shll(r9);
+  movl(rdi, r9);
+  andl(r9, 536870911);
+  testl(r9, 268435456);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_5_0_1);
+  shrl(r9);
+  movl(ebx, 0);
+  shlq(r9, 32);
+  orq(r9, r11);
+
+  bind(L_2TAG_PACKET_6_0_1);
+
+  bind(L_2TAG_PACKET_7_0_1);
+
+  cmpq(r9, 0);
+  jcc(Assembler::equal, L_2TAG_PACKET_8_0_1);
+
+  bind(L_2TAG_PACKET_9_0_1);
+  bsrq(r11, r9);
+  movl(ecx, 29);
+  subl(ecx, r11);
+  jcc(Assembler::lessEqual, L_2TAG_PACKET_10_0_1);
+  shlq(r9);
+  movq(rax, r10);
+  shlq(r10);
+  addl(edx, ecx);
+  negl(ecx);
+  addl(ecx, 64);
+  shrq(rax);
+  shrq(r8);
+  orq(r9, rax);
+  orq(r10, r8);
+
+  bind(L_2TAG_PACKET_11_0_1);
+  cvtsi2sdq(xmm0, r9);
+  shrq(r10, 1);
+  cvtsi2sdq(xmm3, r10);
+  xorpd(xmm4, xmm4);
+  shll(edx, 4);
+  negl(edx);
+  addl(edx, 16368);
+  orl(edx, rsi);
+  xorl(edx, ebx);
+  pinsrw(xmm4, edx, 3);
+  movq(xmm2, ExternalAddress(PI_4));    //0x40000000UL, 0x3fe921fbUL, 0x18469899UL, 0x3e64442dUL
+  movq(xmm6, ExternalAddress(8 + PI_4));    //0x3fe921fbUL, 0x18469899UL, 0x3e64442dUL
+  xorpd(xmm5, xmm5);
+  subl(edx, 1008);
+  pinsrw(xmm5, edx, 3);
+  mulsd(xmm0, xmm4);
+  shll(rsi, 16);
+  sarl(rsi, 31);
+  mulsd(xmm3, xmm5);
+  movdqu(xmm1, xmm0);
+  mulsd(xmm0, xmm2);
+  shrl(rdi, 29);
+  addsd(xmm1, xmm3);
+  mulsd(xmm3, xmm2);
+  addl(rdi, rsi);
+  xorl(rdi, rsi);
+  mulsd(xmm6, xmm1);
+  movl(eax, rdi);
+  addsd(xmm6, xmm3);
+  movdqu(xmm2, xmm0);
+  addsd(xmm0, xmm6);
+  subsd(xmm2, xmm0);
+  addsd(xmm6, xmm2);
+
+  bind(L_2TAG_PACKET_12_0_1);
+  movq(xmm1, ExternalAddress(PI32INV));    //0x6dc9c883UL, 0x40245f30UL
+  mulsd(xmm1, xmm0);
+  movq(xmm5, ExternalAddress(ONEHALF));    //0x00000000UL, 0x3fe00000UL, 0x00000000UL, 0x3fe00000UL
+  movq(xmm4, ExternalAddress(SIGN_MASK));    //0x00000000UL, 0x80000000UL
+  pand(xmm4, xmm0);
+  por(xmm5, xmm4);
+  addpd(xmm1, xmm5);
+  cvttsd2sil(edx, xmm1);
+  cvtsi2sdl(xmm1, edx);
+  movq(xmm3, ExternalAddress(P_1));    //0x54400000UL, 0x3fb921fbUL
+  movdqu(xmm2, ExternalAddress(P_2));    //0x1a600000UL, 0x3d90b461UL, 0x1a600000UL, 0x3d90b461UL
+  mulsd(xmm3, xmm1);
+  unpcklpd(xmm1, xmm1);
+  shll(eax, 3);
+  addl(edx, 1865216);
+  movdqu(xmm4, xmm0);
+  addl(edx, eax);
+  andl(edx, 63);
+  movdqu(xmm5, ExternalAddress(SC_4));    //0x54400000UL, 0x3fb921fbUL
+  lea(rax, ExternalAddress(Ctable));
+  shll(edx, 5);
+  addq(rax, rdx);
+  mulpd(xmm2, xmm1);
+  subsd(xmm0, xmm3);
+  mulsd(xmm1, ExternalAddress(P_3));    //0x2e037073UL, 0x3b63198aUL
+  subsd(xmm4, xmm3);
+  movq(xmm7, Address(rax, 8));
+  unpcklpd(xmm0, xmm0);
+  movdqu(xmm3, xmm4);
+  subsd(xmm4, xmm2);
+  mulpd(xmm5, xmm0);
+  subpd(xmm0, xmm2);
+  mulsd(xmm7, xmm4);
+  subsd(xmm3, xmm4);
+  mulpd(xmm5, xmm0);
+  mulpd(xmm0, xmm0);
+  subsd(xmm3, xmm2);
+  movdqu(xmm2, Address(rax, 0));
+  subsd(xmm1, xmm3);
+  movq(xmm3, Address(rax, 24));
+  addsd(xmm2, xmm3);
+  subsd(xmm7, xmm2);
+  subsd(xmm1, xmm6);
+  movdqu(xmm6, ExternalAddress(SC_2));    //0x11111111UL, 0x3f811111UL, 0x55555555UL, 0x3fa55555UL
+  mulsd(xmm2, xmm4);
+  mulpd(xmm6, xmm0);
+  mulsd(xmm3, xmm4);
+  mulpd(xmm2, xmm0);
+  mulpd(xmm0, xmm0);
+  addpd(xmm5, ExternalAddress(SC_3));    //0x1a01a01aUL, 0xbf2a01a0UL, 0x16c16c17UL, 0xbf56c16cUL
+  mulsd(xmm4, Address(rax, 0));
+  addpd(xmm6, ExternalAddress(SC_1));    //0x55555555UL, 0xbfc55555UL, 0x00000000UL, 0xbfe00000UL
+  mulpd(xmm5, xmm0);
+  movdqu(xmm0, xmm3);
+  addsd(xmm3, Address(rax, 8));
+  mulpd(xmm1, xmm7);
+  movdqu(xmm7, xmm4);
+  addsd(xmm4, xmm3);
+  addpd(xmm6, xmm5);
+  movq(xmm5, Address(rax, 8));
+  subsd(xmm5, xmm3);
+  subsd(xmm3, xmm4);
+  addsd(xmm1, Address(rax, 16));
+  mulpd(xmm6, xmm2);
+  addsd(xmm5, xmm0);
+  addsd(xmm3, xmm7);
+  addsd(xmm1, xmm5);
+  addsd(xmm1, xmm3);
+  addsd(xmm1, xmm6);
+  unpckhpd(xmm6, xmm6);
+  movdqu(xmm0, xmm4);
+  addsd(xmm1, xmm6);
+  addsd(xmm0, xmm1);
+  jmp(B1_4);
+
+  bind(L_2TAG_PACKET_8_0_1);
+  addl(edx, 64);
+  movq(r9, r10);
+  movq(r10, r8);
+  movl(r8, 0);
+  cmpq(r9, 0);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_9_0_1);
+  addl(edx, 64);
+  movq(r9, r10);
+  movq(r10, r8);
+  cmpq(r9, 0);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_9_0_1);
+  xorpd(xmm0, xmm0);
+  xorpd(xmm6, xmm6);
+  jmp(L_2TAG_PACKET_12_0_1);
+
+  bind(L_2TAG_PACKET_10_0_1);
+  jcc(Assembler::equal, L_2TAG_PACKET_11_0_1);
+  negl(ecx);
+  shrq(r10);
+  movq(rax, r9);
+  shrq(r9);
+  subl(edx, ecx);
+  negl(ecx);
+  addl(ecx, 64);
+  shlq(rax);
+  orq(r10, rax);
+  jmp(L_2TAG_PACKET_11_0_1);
+
+  bind(L_2TAG_PACKET_4_0_1);
+  negl(ecx);
+  shlq(r9, 32);
+  orq(r9, r11);
+  shlq(r9);
+  movq(rdi, r9);
+  testl(r9, INT_MIN);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_13_0_1);
+  shrl(r9);
+  movl(ebx, 0);
+  shrq(rdi, 3);
+  jmp(L_2TAG_PACKET_7_0_1);
+
+  bind(L_2TAG_PACKET_5_0_1);
+  shrl(r9);
+  movl(ebx, 536870912);
+  shrl(ebx);
+  shlq(r9, 32);
+  orq(r9, r11);
+  shlq(rbx, 32);
+  addl(rdi, 536870912);
+  movl(rcx, 0);
+  movl(r11, 0);
+  subq(rcx, r8);
+  sbbq(r11, r10);
+  sbbq(rbx, r9);
+  movq(r8, rcx);
+  movq(r10, r11);
+  movq(r9, rbx);
+  movl(ebx, 32768);
+  jmp(L_2TAG_PACKET_6_0_1);
+
+  bind(L_2TAG_PACKET_13_0_1);
+  shrl(r9);
+  mov64(rbx, 0x100000000);
+  shrq(rbx);
+  movl(rcx, 0);
+  movl(r11, 0);
+  subq(rcx, r8);
+  sbbq(r11, r10);
+  sbbq(rbx, r9);
+  movq(r8, rcx);
+  movq(r10, r11);
+  movq(r9, rbx);
+  movl(ebx, 32768);
+  shrq(rdi, 3);
+  addl(rdi, 536870912);
+  jmp(L_2TAG_PACKET_7_0_1);
+
+  bind(L_2TAG_PACKET_3_0_1);
+  movq(xmm0, Address(rsp, 8));
+  mulsd(xmm0, ExternalAddress(NEG_ZERO));    //0x00000000UL, 0x80000000UL
+  movq(Address(rsp, 0), xmm0);
+
+  bind(L_2TAG_PACKET_14_0_1);
+
+  bind(B1_4);
+  addq(rsp, 16);
+  pop(rbx);
+}
+
+/******************************************************************************/
+//                     ALGORITHM DESCRIPTION - COS()
+//                     ---------------------
+//
+//     1. RANGE REDUCTION
+//
+//     We perform an initial range reduction from X to r with
+//
+//          X =~= N * pi/32 + r
+//
+//     so that |r| <= pi/64 + epsilon. We restrict inputs to those
+//     where |N| <= 932560. Beyond this, the range reduction is
+//     insufficiently accurate. For extremely small inputs,
+//     denormalization can occur internally, impacting performance.
+//     This means that the main path is actually only taken for
+//     2^-252 <= |X| < 90112.
+//
+//     To avoid branches, we perform the range reduction to full
+//     accuracy each time.
+//
+//          X - N * (P_1 + P_2 + P_3)
+//
+//     where P_1 and P_2 are 32-bit numbers (so multiplication by N
+//     is exact) and P_3 is a 53-bit number. Together, these
+//     approximate pi well enough for all cases in the restricted
+//     range.
+//
+//     The main reduction sequence is:
+//
+//             y = 32/pi * x
+//             N = integer(y)
+//     (computed by adding and subtracting off SHIFTER)
+//
+//             m_1 = N * P_1
+//             m_2 = N * P_2
+//             r_1 = x - m_1
+//             r = r_1 - m_2
+//     (this r can be used for most of the calculation)
+//
+//             c_1 = r_1 - r
+//             m_3 = N * P_3
+//             c_2 = c_1 - m_2
+//             c = c_2 - m_3
+//
+//     2. MAIN ALGORITHM
+//
+//     The algorithm uses a table lookup based on B = M * pi / 32
+//     where M = N mod 64. The stored values are:
+//       sigma             closest power of 2 to cos(B)
+//       C_hl              53-bit cos(B) - sigma
+//       S_hi + S_lo       2 * 53-bit sin(B)
+//
+//     The computation is organized as follows:
+//
+//          sin(B + r + c) = [sin(B) + sigma * r] +
+//                           r * (cos(B) - sigma) +
+//                           sin(B) * [cos(r + c) - 1] +
+//                           cos(B) * [sin(r + c) - r]
+//
+//     which is approximately:
+//
+//          [S_hi + sigma * r] +
+//          C_hl * r +
+//          S_lo + S_hi * [(cos(r) - 1) - r * c] +
+//          (C_hl + sigma) * [(sin(r) - r) + c]
+//
+//     and this is what is actually computed. We separate this sum
+//     into four parts:
+//
+//          hi + med + pols + corr
+//
+//     where
+//
+//          hi       = S_hi + sigma r
+//          med      = C_hl * r
+//          pols     = S_hi * (cos(r) - 1) + (C_hl + sigma) * (sin(r) - r)
+//          corr     = S_lo + c * ((C_hl + sigma) - S_hi * r)
+//
+//     3. POLYNOMIAL
+//
+//     The polynomial S_hi * (cos(r) - 1) + (C_hl + sigma) *
+//     (sin(r) - r) can be rearranged freely, since it is quite
+//     small, so we exploit parallelism to the fullest.
+//
+//          psc4       =   SC_4 * r_1
+//          msc4       =   psc4 * r
+//          r2         =   r * r
+//          msc2       =   SC_2 * r2
+//          r4         =   r2 * r2
+//          psc3       =   SC_3 + msc4
+//          psc1       =   SC_1 + msc2
+//          msc3       =   r4 * psc3
+//          sincospols =   psc1 + msc3
+//          pols       =   sincospols *
+//                         <S_hi * r^2 | (C_hl + sigma) * r^3>
+//
+//     4. CORRECTION TERM
+//
+//     This is where the "c" component of the range reduction is
+//     taken into account; recall that just "r" is used for most of
+//     the calculation.
+//
+//          -c   = m_3 - c_2
+//          -d   = S_hi * r - (C_hl + sigma)
+//          corr = -c * -d + S_lo
+//
+//     5. COMPENSATED SUMMATIONS
+//
+//     The two successive compensated summations add up the high
+//     and medium parts, leaving just the low parts to add up at
+//     the end.
+//
+//          rs        =  sigma * r
+//          res_int   =  S_hi + rs
+//          k_0       =  S_hi - res_int
+//          k_2       =  k_0 + rs
+//          med       =  C_hl * r
+//          res_hi    =  res_int + med
+//          k_1       =  res_int - res_hi
+//          k_3       =  k_1 + med
+//
+//     6. FINAL SUMMATION
+//
+//     We now add up all the small parts:
+//
+//          res_lo = pols(hi) + pols(lo) + corr + k_1 + k_3
+//
+//     Now the overall result is just:
+//
+//          res_hi + res_lo
+//
+//     7. SMALL ARGUMENTS
+//
+//     Inputs with |X| < 2^-252 are treated specially as
+//     1 - |x|.
+//
+// Special cases:
+//  cos(NaN) = quiet NaN, and raise invalid exception
+//  cos(INF) = NaN and raise invalid exception
+//  cos(0) = 1
+//
+/******************************************************************************/
+
+ALIGNED_(8) juint _ONE[] =
+{
+    0x00000000UL, 0x3ff00000UL
+};
+
+void MacroAssembler::fast_cos(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ecx, Register edx, Register r8, Register r9, Register r10, Register r11) {
+  Label L_2TAG_PACKET_0_0_1, L_2TAG_PACKET_1_0_1, L_2TAG_PACKET_2_0_1, L_2TAG_PACKET_3_0_1;
+  Label L_2TAG_PACKET_4_0_1, L_2TAG_PACKET_5_0_1, L_2TAG_PACKET_6_0_1, L_2TAG_PACKET_7_0_1;
+  Label L_2TAG_PACKET_8_0_1, L_2TAG_PACKET_9_0_1, L_2TAG_PACKET_10_0_1, L_2TAG_PACKET_11_0_1;
+  Label L_2TAG_PACKET_12_0_1, L_2TAG_PACKET_13_0_1, B1_2, B1_3, B1_4, B1_5, start;
+
+  assert_different_registers(r8, r9, r10, r11, eax, ecx, edx);
+
+  address ONEHALF = (address)_ONEHALF;
+  address P_2 = (address)_P_2;
+  address SC_4 = (address)_SC_4;
+  address Ctable = (address)_Ctable;
+  address SC_2 = (address)_SC_2;
+  address SC_3 = (address)_SC_3;
+  address SC_1 = (address)_SC_1;
+  address PI_INV_TABLE = (address)_PI_INV_TABLE;
+  address PI_4 = (address)_PI_4;
+  address PI32INV = (address)_PI32INV;
+  address SIGN_MASK = (address)_SIGN_MASK;
+  address P_1 = (address)_P_1;
+  address P_3 = (address)_P_3;
+  address ONE = (address)_ONE;
+  address NEG_ZERO = (address)_NEG_ZERO;
+
+  bind(start);
+  push(rbx);
+  subq(rsp, 16);
+  movsd(Address(rsp, 8), xmm0);
+
+  bind(B1_2);
+  movl(eax, Address(rsp, 12));
+  movq(xmm1, ExternalAddress(PI32INV));    //0x6dc9c883UL, 0x40245f30UL
+  andl(eax, 2147418112);
+  subl(eax, 808452096);
+  cmpl(eax, 281346048);
+  jcc(Assembler::above, L_2TAG_PACKET_0_0_1);
+  mulsd(xmm1, xmm0);
+  movdqu(xmm5, ExternalAddress(ONEHALF));    //0x00000000UL, 0x3fe00000UL, 0x00000000UL, 0x3fe00000UL
+  movq(xmm4, ExternalAddress(SIGN_MASK));    //0x00000000UL, 0x80000000UL
+  pand(xmm4, xmm0);
+  por(xmm5, xmm4);
+  addpd(xmm1, xmm5);
+  cvttsd2sil(edx, xmm1);
+  cvtsi2sdl(xmm1, edx);
+  movdqu(xmm2, ExternalAddress(P_2));    //0x1a600000UL, 0x3d90b461UL, 0x1a600000UL, 0x3d90b461UL
+  movq(xmm3, ExternalAddress(P_1));    //0x54400000UL, 0x3fb921fbUL
+  mulsd(xmm3, xmm1);
+  unpcklpd(xmm1, xmm1);
+  addq(rdx, 1865232);
+  movdqu(xmm4, xmm0);
+  andq(rdx, 63);
+  movdqu(xmm5, ExternalAddress(SC_4));    //0xa556c734UL, 0x3ec71de3UL, 0x1a01a01aUL, 0x3efa01a0UL
+  lea(rax, ExternalAddress(Ctable));
+  shlq(rdx, 5);
+  addq(rax, rdx);
+  mulpd(xmm2, xmm1);
+  subsd(xmm0, xmm3);
+  mulsd(xmm1, ExternalAddress(P_3));    //0x2e037073UL, 0x3b63198aUL
+  subsd(xmm4, xmm3);
+  movq(xmm7, Address(rax, 8));
+  unpcklpd(xmm0, xmm0);
+  movdqu(xmm3, xmm4);
+  subsd(xmm4, xmm2);
+  mulpd(xmm5, xmm0);
+  subpd(xmm0, xmm2);
+  movdqu(xmm6, ExternalAddress(SC_2));    //0x11111111UL, 0x3f811111UL, 0x55555555UL, 0x3fa55555UL
+  mulsd(xmm7, xmm4);
+  subsd(xmm3, xmm4);
+  mulpd(xmm5, xmm0);
+  mulpd(xmm0, xmm0);
+  subsd(xmm3, xmm2);
+  movdqu(xmm2, Address(rax, 0));
+  subsd(xmm1, xmm3);
+  movq(xmm3, Address(rax, 24));
+  addsd(xmm2, xmm3);
+  subsd(xmm7, xmm2);
+  mulsd(xmm2, xmm4);
+  mulpd(xmm6, xmm0);
+  mulsd(xmm3, xmm4);
+  mulpd(xmm2, xmm0);
+  mulpd(xmm0, xmm0);
+  addpd(xmm5, ExternalAddress(SC_3));    //0x1a01a01aUL, 0xbf2a01a0UL, 0x16c16c17UL, 0xbf56c16cUL
+  mulsd(xmm4, Address(rax, 0));
+  addpd(xmm6, ExternalAddress(SC_1));    //0x55555555UL, 0xbfc55555UL, 0x00000000UL, 0xbfe00000UL
+  mulpd(xmm5, xmm0);
+  movdqu(xmm0, xmm3);
+  addsd(xmm3, Address(rax, 8));
+  mulpd(xmm1, xmm7);
+  movdqu(xmm7, xmm4);
+  addsd(xmm4, xmm3);
+  addpd(xmm6, xmm5);
+  movq(xmm5, Address(rax, 8));
+  subsd(xmm5, xmm3);
+  subsd(xmm3, xmm4);
+  addsd(xmm1, Address(rax, 16));
+  mulpd(xmm6, xmm2);
+  addsd(xmm0, xmm5);
+  addsd(xmm3, xmm7);
+  addsd(xmm0, xmm1);
+  addsd(xmm0, xmm3);
+  addsd(xmm0, xmm6);
+  unpckhpd(xmm6, xmm6);
+  addsd(xmm0, xmm6);
+  addsd(xmm0, xmm4);
+  jmp(B1_4);
+
+  bind(L_2TAG_PACKET_0_0_1);
+  jcc(Assembler::greater, L_2TAG_PACKET_1_0_1);
+  pextrw(eax, xmm0, 3);
+  andl(eax, 32767);
+  pinsrw(xmm0, eax, 3);
+  movq(xmm1, ExternalAddress(ONE));    //0x00000000UL, 0x3ff00000UL
+  subsd(xmm1, xmm0);
+  movdqu(xmm0, xmm1);
+  jmp(B1_4);
+
+  bind(L_2TAG_PACKET_1_0_1);
+  pextrw(eax, xmm0, 3);
+  andl(eax, 32752);
+  cmpl(eax, 32752);
+  jcc(Assembler::equal, L_2TAG_PACKET_2_0_1);
+  pextrw(ecx, xmm0, 3);
+  andl(ecx, 32752);
+  subl(ecx, 16224);
+  shrl(ecx, 7);
+  andl(ecx, 65532);
+  lea(r11, ExternalAddress(PI_INV_TABLE));
+  addq(rcx, r11);
+  movdq(rax, xmm0);
+  movl(r10, Address(rcx, 20));
+  movl(r8, Address(rcx, 24));
+  movl(edx, eax);
+  shrq(rax, 21);
+  orl(eax, INT_MIN);
+  shrl(eax, 11);
+  movl(r9, r10);
+  imulq(r10, rdx);
+  imulq(r9, rax);
+  imulq(r8, rax);
+  movl(rsi, Address(rcx, 16));
+  movl(rdi, Address(rcx, 12));
+  movl(r11, r10);
+  shrq(r10, 32);
+  addq(r9, r10);
+  addq(r11, r8);
+  movl(r8, r11);
+  shrq(r11, 32);
+  addq(r9, r11);
+  movl(r10, rsi);
+  imulq(rsi, rdx);
+  imulq(r10, rax);
+  movl(r11, rdi);
+  imulq(rdi, rdx);
+  movl(rbx, rsi);
+  shrq(rsi, 32);
+  addq(r9, rbx);
+  movl(rbx, r9);
+  shrq(r9, 32);
+  addq(r10, rsi);
+  addq(r10, r9);
+  shlq(rbx, 32);
+  orq(r8, rbx);
+  imulq(r11, rax);
+  movl(r9, Address(rcx, 8));
+  movl(rsi, Address(rcx, 4));
+  movl(rbx, rdi);
+  shrq(rdi, 32);
+  addq(r10, rbx);
+  movl(rbx, r10);
+  shrq(r10, 32);
+  addq(r11, rdi);
+  addq(r11, r10);
+  movq(rdi, r9);
+  imulq(r9, rdx);
+  imulq(rdi, rax);
+  movl(r10, r9);
+  shrq(r9, 32);
+  addq(r11, r10);
+  movl(r10, r11);
+  shrq(r11, 32);
+  addq(rdi, r9);
+  addq(rdi, r11);
+  movq(r9, rsi);
+  imulq(rsi, rdx);
+  imulq(r9, rax);
+  shlq(r10, 32);
+  orq(r10, rbx);
+  movl(eax, Address(rcx, 0));
+  movl(r11, rsi);
+  shrq(rsi, 32);
+  addq(rdi, r11);
+  movl(r11, rdi);
+  shrq(rdi, 32);
+  addq(r9, rsi);
+  addq(r9, rdi);
+  imulq(rdx, rax);
+  pextrw(rbx, xmm0, 3);
+  lea(rdi, ExternalAddress(PI_INV_TABLE));
+  subq(rcx, rdi);
+  addl(ecx, ecx);
+  addl(ecx, ecx);
+  addl(ecx, ecx);
+  addl(ecx, 19);
+  movl(rsi, 32768);
+  andl(rsi, rbx);
+  shrl(rbx, 4);
+  andl(rbx, 2047);
+  subl(rbx, 1023);
+  subl(ecx, rbx);
+  addq(r9, rdx);
+  movl(edx, ecx);
+  addl(edx, 32);
+  cmpl(ecx, 1);
+  jcc(Assembler::less, L_2TAG_PACKET_3_0_1);
+  negl(ecx);
+  addl(ecx, 29);
+  shll(r9);
+  movl(rdi, r9);
+  andl(r9, 536870911);
+  testl(r9, 268435456);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_4_0_1);
+  shrl(r9);
+  movl(rbx, 0);
+  shlq(r9, 32);
+  orq(r9, r11);
+
+  bind(L_2TAG_PACKET_5_0_1);
+
+  bind(L_2TAG_PACKET_6_0_1);
+  cmpq(r9, 0);
+  jcc(Assembler::equal, L_2TAG_PACKET_7_0_1);
+
+  bind(L_2TAG_PACKET_8_0_1);
+  bsrq(r11, r9);
+  movl(ecx, 29);
+  subl(ecx, r11);
+  jcc(Assembler::lessEqual, L_2TAG_PACKET_9_0_1);
+  shlq(r9);
+  movq(rax, r10);
+  shlq(r10);
+  addl(edx, ecx);
+  negl(ecx);
+  addl(ecx, 64);
+  shrq(rax);
+  shrq(r8);
+  orq(r9, rax);
+  orq(r10, r8);
+
+  bind(L_2TAG_PACKET_10_0_1);
+  cvtsi2sdq(xmm0, r9);
+  shrq(r10, 1);
+  cvtsi2sdq(xmm3, r10);
+  xorpd(xmm4, xmm4);
+  shll(edx, 4);
+  negl(edx);
+  addl(edx, 16368);
+  orl(edx, rsi);
+  xorl(edx, rbx);
+  pinsrw(xmm4, edx, 3);
+  movq(xmm2, ExternalAddress(PI_4));    //0x40000000UL, 0x3fe921fbUL, 0x18469899UL, 0x3e64442dUL
+  movq(xmm6, ExternalAddress(8 + PI_4));    //0x3fe921fbUL, 0x18469899UL, 0x3e64442dUL
+  xorpd(xmm5, xmm5);
+  subl(edx, 1008);
+  pinsrw(xmm5, edx, 3);
+  mulsd(xmm0, xmm4);
+  shll(rsi, 16);
+  sarl(rsi, 31);
+  mulsd(xmm3, xmm5);
+  movdqu(xmm1, xmm0);
+  mulsd(xmm0, xmm2);
+  shrl(rdi, 29);
+  addsd(xmm1, xmm3);
+  mulsd(xmm3, xmm2);
+  addl(rdi, rsi);
+  xorl(rdi, rsi);
+  mulsd(xmm6, xmm1);
+  movl(eax, rdi);
+  addsd(xmm6, xmm3);
+  movdqu(xmm2, xmm0);
+  addsd(xmm0, xmm6);
+  subsd(xmm2, xmm0);
+  addsd(xmm6, xmm2);
+
+  bind(L_2TAG_PACKET_11_0_1);
+  movq(xmm1, ExternalAddress(PI32INV));    //0x6dc9c883UL, 0x40245f30UL
+  mulsd(xmm1, xmm0);
+  movq(xmm5, ExternalAddress(ONEHALF));    //0x00000000UL, 0x3fe00000UL, 0x00000000UL, 0x3fe00000UL
+  movq(xmm4, ExternalAddress(SIGN_MASK));    //0x00000000UL, 0x80000000UL
+  pand(xmm4, xmm0);
+  por(xmm5, xmm4);
+  addpd(xmm1, xmm5);
+  cvttsd2siq(rdx, xmm1);
+  cvtsi2sdq(xmm1, rdx);
+  movq(xmm3, ExternalAddress(P_1));    //0x54400000UL, 0x3fb921fbUL
+  movdqu(xmm2, ExternalAddress(P_2));    //0x1a600000UL, 0x3d90b461UL, 0x1a600000UL, 0x3d90b461UL
+  mulsd(xmm3, xmm1);
+  unpcklpd(xmm1, xmm1);
+  shll(eax, 3);
+  addl(edx, 1865232);
+  movdqu(xmm4, xmm0);
+  addl(edx, eax);
+  andl(edx, 63);
+  movdqu(xmm5, ExternalAddress(SC_4));    //0xa556c734UL, 0x3ec71de3UL, 0x1a01a01aUL, 0x3efa01a0UL
+  lea(rax, ExternalAddress(Ctable));
+  shll(edx, 5);
+  addq(rax, rdx);
+  mulpd(xmm2, xmm1);
+  subsd(xmm0, xmm3);
+  mulsd(xmm1, ExternalAddress(P_3));    //0x2e037073UL, 0x3b63198aUL
+  subsd(xmm4, xmm3);
+  movq(xmm7, Address(rax, 8));
+  unpcklpd(xmm0, xmm0);
+  movdqu(xmm3, xmm4);
+  subsd(xmm4, xmm2);
+  mulpd(xmm5, xmm0);
+  subpd(xmm0, xmm2);
+  mulsd(xmm7, xmm4);
+  subsd(xmm3, xmm4);
+  mulpd(xmm5, xmm0);
+  mulpd(xmm0, xmm0);
+  subsd(xmm3, xmm2);
+  movdqu(xmm2, Address(rax, 0));
+  subsd(xmm1, xmm3);
+  movq(xmm3, Address(rax, 24));
+  addsd(xmm2, xmm3);
+  subsd(xmm7, xmm2);
+  subsd(xmm1, xmm6);
+  movdqu(xmm6, ExternalAddress(SC_2));    //0x11111111UL, 0x3f811111UL, 0x55555555UL, 0x3fa55555UL
+  mulsd(xmm2, xmm4);
+  mulpd(xmm6, xmm0);
+  mulsd(xmm3, xmm4);
+  mulpd(xmm2, xmm0);
+  mulpd(xmm0, xmm0);
+  addpd(xmm5, ExternalAddress(SC_3));    //0x1a01a01aUL, 0xbf2a01a0UL, 0x16c16c17UL, 0xbf56c16cUL
+  mulsd(xmm4, Address(rax, 0));
+  addpd(xmm6, ExternalAddress(SC_1));    //0x55555555UL, 0xbfc55555UL, 0x00000000UL, 0xbfe00000UL
+  mulpd(xmm5, xmm0);
+  movdqu(xmm0, xmm3);
+  addsd(xmm3, Address(rax, 8));
+  mulpd(xmm1, xmm7);
+  movdqu(xmm7, xmm4);
+  addsd(xmm4, xmm3);
+  addpd(xmm6, xmm5);
+  movq(xmm5, Address(rax, 8));
+  subsd(xmm5, xmm3);
+  subsd(xmm3, xmm4);
+  addsd(xmm1, Address(rax, 16));
+  mulpd(xmm6, xmm2);
+  addsd(xmm5, xmm0);
+  addsd(xmm3, xmm7);
+  addsd(xmm1, xmm5);
+  addsd(xmm1, xmm3);
+  addsd(xmm1, xmm6);
+  unpckhpd(xmm6, xmm6);
+  movdqu(xmm0, xmm4);
+  addsd(xmm1, xmm6);
+  addsd(xmm0, xmm1);
+  jmp(B1_4);
+
+  bind(L_2TAG_PACKET_7_0_1);
+  addl(edx, 64);
+  movq(r9, r10);
+  movq(r10, r8);
+  movl(r8, 0);
+  cmpq(r9, 0);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_8_0_1);
+  addl(edx, 64);
+  movq(r9, r10);
+  movq(r10, r8);
+  cmpq(r9, 0);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_8_0_1);
+  xorpd(xmm0, xmm0);
+  xorpd(xmm6, xmm6);
+  jmp(L_2TAG_PACKET_11_0_1);
+
+  bind(L_2TAG_PACKET_9_0_1);
+  jcc(Assembler::equal, L_2TAG_PACKET_10_0_1);
+  negl(ecx);
+  shrq(r10);
+  movq(rax, r9);
+  shrq(r9);
+  subl(edx, ecx);
+  negl(ecx);
+  addl(ecx, 64);
+  shlq(rax);
+  orq(r10, rax);
+  jmp(L_2TAG_PACKET_10_0_1);
+  bind(L_2TAG_PACKET_3_0_1);
+  negl(ecx);
+  shlq(r9, 32);
+  orq(r9, r11);
+  shlq(r9);
+  movq(rdi, r9);
+  testl(r9, INT_MIN);
+  jcc(Assembler::notEqual, L_2TAG_PACKET_12_0_1);
+  shrl(r9);
+  movl(rbx, 0);
+  shrq(rdi, 3);
+  jmp(L_2TAG_PACKET_6_0_1);
+
+  bind(L_2TAG_PACKET_4_0_1);
+  shrl(r9);
+  movl(rbx, 536870912);
+  shrl(rbx);
+  shlq(r9, 32);
+  orq(r9, r11);
+  shlq(rbx, 32);
+  addl(rdi, 536870912);
+  movl(rcx, 0);
+  movl(r11, 0);
+  subq(rcx, r8);
+  sbbq(r11, r10);
+  sbbq(rbx, r9);
+  movq(r8, rcx);
+  movq(r10, r11);
+  movq(r9, rbx);
+  movl(rbx, 32768);
+  jmp(L_2TAG_PACKET_5_0_1);
+
+  bind(L_2TAG_PACKET_12_0_1);
+  shrl(r9);
+  mov64(rbx, 0x100000000);
+  shrq(rbx);
+  movl(rcx, 0);
+  movl(r11, 0);
+  subq(rcx, r8);
+  sbbq(r11, r10);
+  sbbq(rbx, r9);
+  movq(r8, rcx);
+  movq(r10, r11);
+  movq(r9, rbx);
+  movl(rbx, 32768);
+  shrq(rdi, 3);
+  addl(rdi, 536870912);
+  jmp(L_2TAG_PACKET_6_0_1);
+
+  bind(L_2TAG_PACKET_2_0_1);
+  movsd(xmm0, Address(rsp, 8));
+  mulsd(xmm0, ExternalAddress(NEG_ZERO));    //0x00000000UL, 0x80000000UL
+  movq(Address(rsp, 0), xmm0);
+
+  bind(L_2TAG_PACKET_13_0_1);
+
+  bind(B1_4);
+  addq(rsp, 16);
+  pop(rbx);
+}
--- a/hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -972,6 +972,15 @@
   }
 }
 
+void MacroAssembler::addpd(XMMRegister dst, AddressLiteral src) {
+  if (reachable(src)) {
+    Assembler::addpd(dst, as_Address(src));
+  } else {
+    lea(rscratch1, src);
+    Assembler::addpd(dst, Address(rscratch1, 0));
+  }
+}
+
 void MacroAssembler::align(int modulus) {
   align(modulus, offset());
 }
@@ -5417,7 +5426,7 @@
                                      Label& try_eden,
                                      Label& slow_case) {
   Register top = rax;
-  Register t1  = rcx;
+  Register t1  = rcx; // object size
   Register t2  = rsi;
   Register thread_reg = NOT_LP64(rdi) LP64_ONLY(r15_thread);
   assert_different_registers(top, thread_reg, t1, t2, /* preserve: */ rbx, rdx);
@@ -5513,12 +5522,76 @@
   addptr(top, t1);
   subptr(top, (int32_t)ThreadLocalAllocBuffer::alignment_reserve_in_bytes());
   movptr(Address(thread_reg, in_bytes(JavaThread::tlab_end_offset())), top);
+
+  if (ZeroTLAB) {
+    // This is a fast TLAB refill, therefore the GC is not notified of it.
+    // So compiled code must fill the new TLAB with zeroes.
+    movptr(top, Address(thread_reg, in_bytes(JavaThread::tlab_start_offset())));
+    zero_memory(top, t1, 0, t2);
+  }
+
   verify_tlab();
   jmp(retry);
 
   return thread_reg; // for use by caller
 }
 
+// Preserves the contents of address, destroys the contents length_in_bytes and temp.
+void MacroAssembler::zero_memory(Register address, Register length_in_bytes, int offset_in_bytes, Register temp) {
+  assert(address != length_in_bytes && address != temp && temp != length_in_bytes, "registers must be different");
+  assert((offset_in_bytes & (BytesPerWord - 1)) == 0, "offset must be a multiple of BytesPerWord");
+  Label done;
+
+  testptr(length_in_bytes, length_in_bytes);
+  jcc(Assembler::zero, done);
+
+  // initialize topmost word, divide index by 2, check if odd and test if zero
+  // note: for the remaining code to work, index must be a multiple of BytesPerWord
+#ifdef ASSERT
+  {
+    Label L;
+    testptr(length_in_bytes, BytesPerWord - 1);
+    jcc(Assembler::zero, L);
+    stop("length must be a multiple of BytesPerWord");
+    bind(L);
+  }
+#endif
+  Register index = length_in_bytes;
+  xorptr(temp, temp);    // use _zero reg to clear memory (shorter code)
+  if (UseIncDec) {
+    shrptr(index, 3);  // divide by 8/16 and set carry flag if bit 2 was set
+  } else {
+    shrptr(index, 2);  // use 2 instructions to avoid partial flag stall
+    shrptr(index, 1);
+  }
+#ifndef _LP64
+  // index could have not been a multiple of 8 (i.e., bit 2 was set)
+  {
+    Label even;
+    // note: if index was a multiple of 8, then it cannot
+    //       be 0 now otherwise it must have been 0 before
+    //       => if it is even, we don't need to check for 0 again
+    jcc(Assembler::carryClear, even);
+    // clear topmost word (no jump would be needed if conditional assignment worked here)
+    movptr(Address(address, index, Address::times_8, offset_in_bytes - 0*BytesPerWord), temp);
+    // index could be 0 now, must check again
+    jcc(Assembler::zero, done);
+    bind(even);
+  }
+#endif // !_LP64
+  // initialize remaining object fields: index is a multiple of 2 now
+  {
+    Label loop;
+    bind(loop);
+    movptr(Address(address, index, Address::times_8, offset_in_bytes - 1*BytesPerWord), temp);
+    NOT_LP64(movptr(Address(address, index, Address::times_8, offset_in_bytes - 2*BytesPerWord), temp);)
+    decrement(index);
+    jcc(Assembler::notZero, loop);
+  }
+
+  bind(done);
+}
+
 void MacroAssembler::incr_allocated_bytes(Register thread,
                                           Register var_size_in_bytes,
                                           int con_size_in_bytes,
@@ -5730,34 +5803,22 @@
   }
 
   Label slow_case, done;
-
-  ExternalAddress pi4_adr = (address)&pi_4;
-  if (reachable(pi4_adr)) {
-    // x ?<= pi/4
-    fld_d(pi4_adr);
-    fld_s(1);                // Stack:  X  PI/4  X
-    fabs();                  // Stack: |X| PI/4  X
-    fcmp(tmp);
-    jcc(Assembler::above, slow_case);
-
-    // fastest case: -pi/4 <= x <= pi/4
-    switch(trig) {
-    case 's':
-      fsin();
-      break;
-    case 'c':
-      fcos();
-      break;
-    case 't':
+  if (trig == 't') {
+    ExternalAddress pi4_adr = (address)&pi_4;
+    if (reachable(pi4_adr)) {
+      // x ?<= pi/4
+      fld_d(pi4_adr);
+      fld_s(1);                // Stack:  X  PI/4  X
+      fabs();                  // Stack: |X| PI/4  X
+      fcmp(tmp);
+      jcc(Assembler::above, slow_case);
+
+      // fastest case: -pi/4 <= x <= pi/4
       ftan();
-      break;
-    default:
-      assert(false, "bad intrinsic");
-      break;
-    }
-    jmp(done);
-  }
-
+
+      jmp(done);
+    }
+  }
   // slow case: runtime call
   bind(slow_case);
 
@@ -5790,7 +5851,6 @@
   }
 }
 
-
 // Look up the method for a megamorphic invokeinterface call.
 // The target method is determined by <intf_klass, itable_index>.
 // The receiver klass is in recv_klass.
--- a/hotspot/src/cpu/x86/vm/macroAssembler_x86.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/cpu/x86/vm/macroAssembler_x86.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -522,6 +522,8 @@
     Label&   slow_case                 // continuation point if fast allocation fails
   );
   Register tlab_refill(Label& retry_tlab, Label& try_eden, Label& slow_case); // returns TLS address
+  void zero_memory(Register address, Register length_in_bytes, int offset_in_bytes, Register temp);
+
   void incr_allocated_bytes(Register thread,
                             Register var_size_in_bytes, int con_size_in_bytes,
                             Register t1 = noreg);
@@ -865,6 +867,7 @@
 
   void andpd(XMMRegister dst, Address src) { Assembler::andpd(dst, src); }
   void andpd(XMMRegister dst, AddressLiteral src);
+  void andpd(XMMRegister dst, XMMRegister src) { Assembler::andpd(dst, src); }
 
   void andps(XMMRegister dst, XMMRegister src) { Assembler::andps(dst, src); }
   void andps(XMMRegister dst, Address src) { Assembler::andps(dst, src); }
@@ -900,10 +903,6 @@
   void ldmxcsr(Address src) { Assembler::ldmxcsr(src); }
   void ldmxcsr(AddressLiteral src);
 
-  // compute pow(x,y) and exp(x) with x86 instructions. Don't cover
-  // all corner cases and may result in NaN and require fallback to a
-  // runtime call.
-  void fast_pow();
   void fast_exp(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3,
                 XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7,
                 Register rax, Register rcx, Register rdx, Register tmp);
@@ -911,11 +910,32 @@
   void fast_log(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3,
                 XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7,
                 Register rax, Register rcx, Register rdx, Register tmp1 LP64_ONLY(COMMA Register tmp2));
+
   void fast_pow(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4,
                 XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register rax, Register rcx,
                 Register rdx NOT_LP64(COMMA  Register tmp) LP64_ONLY(COMMA  Register tmp1)
                 LP64_ONLY(COMMA  Register tmp2) LP64_ONLY(COMMA  Register tmp3) LP64_ONLY(COMMA  Register tmp4));
 
+  void fast_sin(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3,
+                XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7,
+                Register rax, Register rbx LP64_ONLY(COMMA  Register rcx), Register rdx
+                LP64_ONLY(COMMA Register tmp1) LP64_ONLY(COMMA Register tmp2)
+                LP64_ONLY(COMMA Register tmp3) LP64_ONLY(COMMA Register tmp4));
+
+  void fast_cos(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3,
+                XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7,
+                Register rax, Register rcx, Register rdx NOT_LP64(COMMA Register tmp)
+                LP64_ONLY(COMMA Register r8) LP64_ONLY(COMMA Register r9)
+                LP64_ONLY(COMMA Register r10) LP64_ONLY(COMMA Register r11));
+
+#ifndef _LP64
+  void libm_sincos_huge(XMMRegister xmm0, XMMRegister xmm1, Register eax, Register ecx,
+                        Register edx, Register ebx, Register esi, Register edi,
+                        Register ebp, Register esp);
+  void libm_reduce_pi04l(Register eax, Register ecx, Register edx, Register ebx,
+                         Register esi, Register edi, Register ebp, Register esp);
+#endif
+
   void increase_precision();
   void restore_precision();
 
@@ -944,6 +964,10 @@
   void addss(XMMRegister dst, Address src)        { Assembler::addss(dst, src); }
   void addss(XMMRegister dst, AddressLiteral src);
 
+  void addpd(XMMRegister dst, XMMRegister src)    { Assembler::addpd(dst, src); }
+  void addpd(XMMRegister dst, Address src)        { Assembler::addpd(dst, src); }
+  void addpd(XMMRegister dst, AddressLiteral src);
+
   void divsd(XMMRegister dst, XMMRegister src)    { Assembler::divsd(dst, src); }
   void divsd(XMMRegister dst, Address src)        { Assembler::divsd(dst, src); }
   void divsd(XMMRegister dst, AddressLiteral src);
--- a/hotspot/src/cpu/x86/vm/macroAssembler_x86_libm.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,4857 +0,0 @@
-/*
- * Copyright (c) 2015, Intel Corporation.
- * Intel Math Library (LIBM) Source Code
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-#include "precompiled.hpp"
-#include "asm/assembler.hpp"
-#include "asm/assembler.inline.hpp"
-#include "macroAssembler_x86.hpp"
-
-#ifdef _MSC_VER
-#define ALIGNED_(x) __declspec(align(x))
-#else
-#define ALIGNED_(x) __attribute__ ((aligned(x)))
-#endif
-
-// The 32 bit and 64 bit code is at most SSE2 compliant
-
-/******************************************************************************/
-//                     ALGORITHM DESCRIPTION - EXP()
-//                     ---------------------
-//
-// 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
-//
-/******************************************************************************/
-
-#ifdef _LP64
-
-ALIGNED_(16) juint _cv[] =
-{
-    0x652b82feUL, 0x40571547UL, 0x652b82feUL, 0x40571547UL, 0xfefa0000UL,
-    0x3f862e42UL, 0xfefa0000UL, 0x3f862e42UL, 0xbc9e3b3aUL, 0x3d1cf79aUL,
-    0xbc9e3b3aUL, 0x3d1cf79aUL, 0xfffffffeUL, 0x3fdfffffUL, 0xfffffffeUL,
-    0x3fdfffffUL, 0xe3289860UL, 0x3f56c15cUL, 0x555b9e25UL, 0x3fa55555UL,
-    0xc090cf0fUL, 0x3f811115UL, 0x55548ba1UL, 0x3fc55555UL
-};
-
-ALIGNED_(16) juint _shifter[] =
-{
-    0x00000000UL, 0x43380000UL, 0x00000000UL, 0x43380000UL
-};
-
-ALIGNED_(16) juint _mmask[] =
-{
-    0xffffffc0UL, 0x00000000UL, 0xffffffc0UL, 0x00000000UL
-};
-
-ALIGNED_(16) juint _bias[] =
-{
-    0x0000ffc0UL, 0x00000000UL, 0x0000ffc0UL, 0x00000000UL
-};
-
-ALIGNED_(16) juint _Tbl_addr[] =
-{
-    0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x0e03754dUL,
-    0x3cad7bbfUL, 0x3e778060UL, 0x00002c9aUL, 0x3567f613UL, 0x3c8cd252UL,
-    0xd3158574UL, 0x000059b0UL, 0x61e6c861UL, 0x3c60f74eUL, 0x18759bc8UL,
-    0x00008745UL, 0x5d837b6cUL, 0x3c979aa6UL, 0x6cf9890fUL, 0x0000b558UL,
-    0x702f9cd1UL, 0x3c3ebe3dUL, 0x32d3d1a2UL, 0x0000e3ecUL, 0x1e63bcd8UL,
-    0x3ca3516eUL, 0xd0125b50UL, 0x00011301UL, 0x26f0387bUL, 0x3ca4c554UL,
-    0xaea92ddfUL, 0x0001429aUL, 0x62523fb6UL, 0x3ca95153UL, 0x3c7d517aUL,
-    0x000172b8UL, 0x3f1353bfUL, 0x3c8b898cUL, 0xeb6fcb75UL, 0x0001a35bUL,
-    0x3e3a2f5fUL, 0x3c9aecf7UL, 0x3168b9aaUL, 0x0001d487UL, 0x44a6c38dUL,
-    0x3c8a6f41UL, 0x88628cd6UL, 0x0002063bUL, 0xe3a8a894UL, 0x3c968efdUL,
-    0x6e756238UL, 0x0002387aUL, 0x981fe7f2UL, 0x3c80472bUL, 0x65e27cddUL,
-    0x00026b45UL, 0x6d09ab31UL, 0x3c82f7e1UL, 0xf51fdee1UL, 0x00029e9dUL,
-    0x720c0ab3UL, 0x3c8b3782UL, 0xa6e4030bUL, 0x0002d285UL, 0x4db0abb6UL,
-    0x3c834d75UL, 0x0a31b715UL, 0x000306feUL, 0x5dd3f84aUL, 0x3c8fdd39UL,
-    0xb26416ffUL, 0x00033c08UL, 0xcc187d29UL, 0x3ca12f8cUL, 0x373aa9caUL,
-    0x000371a7UL, 0x738b5e8bUL, 0x3ca7d229UL, 0x34e59ff6UL, 0x0003a7dbUL,
-    0xa72a4c6dUL, 0x3c859f48UL, 0x4c123422UL, 0x0003dea6UL, 0x259d9205UL,
-    0x3ca8b846UL, 0x21f72e29UL, 0x0004160aUL, 0x60c2ac12UL, 0x3c4363edUL,
-    0x6061892dUL, 0x00044e08UL, 0xdaa10379UL, 0x3c6ecce1UL, 0xb5c13cd0UL,
-    0x000486a2UL, 0xbb7aafb0UL, 0x3c7690ceUL, 0xd5362a27UL, 0x0004bfdaUL,
-    0x9b282a09UL, 0x3ca083ccUL, 0x769d2ca6UL, 0x0004f9b2UL, 0xc1aae707UL,
-    0x3ca509b0UL, 0x569d4f81UL, 0x0005342bUL, 0x18fdd78eUL, 0x3c933505UL,
-    0x36b527daUL, 0x00056f47UL, 0xe21c5409UL, 0x3c9063e1UL, 0xdd485429UL,
-    0x0005ab07UL, 0x2b64c035UL, 0x3c9432e6UL, 0x15ad2148UL, 0x0005e76fUL,
-    0x99f08c0aUL, 0x3ca01284UL, 0xb03a5584UL, 0x0006247eUL, 0x0073dc06UL,
-    0x3c99f087UL, 0x82552224UL, 0x00066238UL, 0x0da05571UL, 0x3c998d4dUL,
-    0x667f3bccUL, 0x0006a09eUL, 0x86ce4786UL, 0x3ca52bb9UL, 0x3c651a2eUL,
-    0x0006dfb2UL, 0x206f0dabUL, 0x3ca32092UL, 0xe8ec5f73UL, 0x00071f75UL,
-    0x8e17a7a6UL, 0x3ca06122UL, 0x564267c8UL, 0x00075febUL, 0x461e9f86UL,
-    0x3ca244acUL, 0x73eb0186UL, 0x0007a114UL, 0xabd66c55UL, 0x3c65ebe1UL,
-    0x36cf4e62UL, 0x0007e2f3UL, 0xbbff67d0UL, 0x3c96fe9fUL, 0x994cce12UL,
-    0x00082589UL, 0x14c801dfUL, 0x3c951f14UL, 0x9b4492ecUL, 0x000868d9UL,
-    0xc1f0eab4UL, 0x3c8db72fUL, 0x422aa0dbUL, 0x0008ace5UL, 0x59f35f44UL,
-    0x3c7bf683UL, 0x99157736UL, 0x0008f1aeUL, 0x9c06283cUL, 0x3ca360baUL,
-    0xb0cdc5e4UL, 0x00093737UL, 0x20f962aaUL, 0x3c95e8d1UL, 0x9fde4e4fUL,
-    0x00097d82UL, 0x2b91ce27UL, 0x3c71affcUL, 0x82a3f090UL, 0x0009c491UL,
-    0x589a2ebdUL, 0x3c9b6d34UL, 0x7b5de564UL, 0x000a0c66UL, 0x9ab89880UL,
-    0x3c95277cUL, 0xb23e255cUL, 0x000a5503UL, 0x6e735ab3UL, 0x3c846984UL,
-    0x5579fdbfUL, 0x000a9e6bUL, 0x92cb3387UL, 0x3c8c1a77UL, 0x995ad3adUL,
-    0x000ae89fUL, 0xdc2d1d96UL, 0x3ca22466UL, 0xb84f15faUL, 0x000b33a2UL,
-    0xb19505aeUL, 0x3ca1112eUL, 0xf2fb5e46UL, 0x000b7f76UL, 0x0a5fddcdUL,
-    0x3c74ffd7UL, 0x904bc1d2UL, 0x000bcc1eUL, 0x30af0cb3UL, 0x3c736eaeUL,
-    0xdd85529cUL, 0x000c199bUL, 0xd10959acUL, 0x3c84e08fUL, 0x2e57d14bUL,
-    0x000c67f1UL, 0x6c921968UL, 0x3c676b2cUL, 0xdcef9069UL, 0x000cb720UL,
-    0x36df99b3UL, 0x3c937009UL, 0x4a07897bUL, 0x000d072dUL, 0xa63d07a7UL,
-    0x3c74a385UL, 0xdcfba487UL, 0x000d5818UL, 0xd5c192acUL, 0x3c8e5a50UL,
-    0x03db3285UL, 0x000da9e6UL, 0x1c4a9792UL, 0x3c98bb73UL, 0x337b9b5eUL,
-    0x000dfc97UL, 0x603a88d3UL, 0x3c74b604UL, 0xe78b3ff6UL, 0x000e502eUL,
-    0x92094926UL, 0x3c916f27UL, 0xa2a490d9UL, 0x000ea4afUL, 0x41aa2008UL,
-    0x3c8ec3bcUL, 0xee615a27UL, 0x000efa1bUL, 0x31d185eeUL, 0x3c8a64a9UL,
-    0x5b6e4540UL, 0x000f5076UL, 0x4d91cd9dUL, 0x3c77893bUL, 0x819e90d8UL,
-    0x000fa7c1UL
-};
-
-ALIGNED_(16) juint _ALLONES[] =
-{
-    0xffffffffUL, 0xffffffffUL, 0xffffffffUL, 0xffffffffUL
-};
-
-ALIGNED_(16) juint _ebias[] =
-{
-    0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0x3ff00000UL
-};
-
-ALIGNED_(4) juint _XMAX[] =
-{
-    0xffffffffUL, 0x7fefffffUL
-};
-
-ALIGNED_(4) juint _XMIN[] =
-{
-    0x00000000UL, 0x00100000UL
-};
-
-ALIGNED_(4) juint _INF[] =
-{
-    0x00000000UL, 0x7ff00000UL
-};
-
-ALIGNED_(4) juint _ZERO[] =
-{
-    0x00000000UL, 0x00000000UL
-};
-
-ALIGNED_(4) juint _ONE_val[] =
-{
-    0x00000000UL, 0x3ff00000UL
-};
-
-
-// Registers:
-// input: xmm0
-// scratch: xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7
-//          rax, rdx, rcx, tmp - r11
-
-// Code generated by Intel C compiler for LIBM library
-
-void MacroAssembler::fast_exp(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ecx, Register edx, Register tmp) {
-  Label L_2TAG_PACKET_0_0_2, L_2TAG_PACKET_1_0_2, L_2TAG_PACKET_2_0_2, L_2TAG_PACKET_3_0_2;
-  Label L_2TAG_PACKET_4_0_2, L_2TAG_PACKET_5_0_2, L_2TAG_PACKET_6_0_2, L_2TAG_PACKET_7_0_2;
-  Label L_2TAG_PACKET_8_0_2, L_2TAG_PACKET_9_0_2, L_2TAG_PACKET_10_0_2, L_2TAG_PACKET_11_0_2;
-  Label L_2TAG_PACKET_12_0_2, B1_3, B1_5, start;
-
-  assert_different_registers(tmp, eax, ecx, edx);
-  jmp(start);
-  address cv = (address)_cv;
-  address Shifter = (address)_shifter;
-  address mmask = (address)_mmask;
-  address bias = (address)_bias;
-  address Tbl_addr = (address)_Tbl_addr;
-  address ALLONES = (address)_ALLONES;
-  address ebias = (address)_ebias;
-  address XMAX = (address)_XMAX;
-  address XMIN = (address)_XMIN;
-  address INF = (address)_INF;
-  address ZERO = (address)_ZERO;
-  address ONE_val = (address)_ONE_val;
-
-  bind(start);
-  subq(rsp, 24);
-  movsd(Address(rsp, 8), xmm0);
-  unpcklpd(xmm0, xmm0);
-  movdqu(xmm1, ExternalAddress(cv));       // 0x652b82feUL, 0x40571547UL, 0x652b82feUL, 0x40571547UL
-  movdqu(xmm6, ExternalAddress(Shifter));  // 0x00000000UL, 0x43380000UL, 0x00000000UL, 0x43380000UL
-  movdqu(xmm2, ExternalAddress(16+cv));    // 0xfefa0000UL, 0x3f862e42UL, 0xfefa0000UL, 0x3f862e42UL
-  movdqu(xmm3, ExternalAddress(32+cv));    // 0xbc9e3b3aUL, 0x3d1cf79aUL, 0xbc9e3b3aUL, 0x3d1cf79aUL
-  pextrw(eax, xmm0, 3);
-  andl(eax, 32767);
-  movl(edx, 16527);
-  subl(edx, eax);
-  subl(eax, 15504);
-  orl(edx, eax);
-  cmpl(edx, INT_MIN);
-  jcc(Assembler::aboveEqual, L_2TAG_PACKET_0_0_2);
-  mulpd(xmm1, xmm0);
-  addpd(xmm1, xmm6);
-  movapd(xmm7, xmm1);
-  subpd(xmm1, xmm6);
-  mulpd(xmm2, xmm1);
-  movdqu(xmm4, ExternalAddress(64+cv));    // 0xe3289860UL, 0x3f56c15cUL, 0x555b9e25UL, 0x3fa55555UL
-  mulpd(xmm3, xmm1);
-  movdqu(xmm5, ExternalAddress(80+cv));    // 0xc090cf0fUL, 0x3f811115UL, 0x55548ba1UL, 0x3fc55555UL
-  subpd(xmm0, xmm2);
-  movdl(eax, xmm7);
-  movl(ecx, eax);
-  andl(ecx, 63);
-  shll(ecx, 4);
-  sarl(eax, 6);
-  movl(edx, eax);
-  movdqu(xmm6, ExternalAddress(mmask));    // 0xffffffc0UL, 0x00000000UL, 0xffffffc0UL, 0x00000000UL
-  pand(xmm7, xmm6);
-  movdqu(xmm6, ExternalAddress(bias));     // 0x0000ffc0UL, 0x00000000UL, 0x0000ffc0UL, 0x00000000UL
-  paddq(xmm7, xmm6);
-  psllq(xmm7, 46);
-  subpd(xmm0, xmm3);
-  lea(tmp, ExternalAddress(Tbl_addr));
-  movdqu(xmm2, Address(ecx,tmp));
-  mulpd(xmm4, xmm0);
-  movapd(xmm6, xmm0);
-  movapd(xmm1, xmm0);
-  mulpd(xmm6, xmm6);
-  mulpd(xmm0, xmm6);
-  addpd(xmm5, xmm4);
-  mulsd(xmm0, xmm6);
-  mulpd(xmm6, ExternalAddress(48+cv));     // 0xfffffffeUL, 0x3fdfffffUL, 0xfffffffeUL, 0x3fdfffffUL
-  addsd(xmm1, xmm2);
-  unpckhpd(xmm2, xmm2);
-  mulpd(xmm0, xmm5);
-  addsd(xmm1, xmm0);
-  por(xmm2, xmm7);
-  unpckhpd(xmm0, xmm0);
-  addsd(xmm0, xmm1);
-  addsd(xmm0, xmm6);
-  addl(edx, 894);
-  cmpl(edx, 1916);
-  jcc (Assembler::above, L_2TAG_PACKET_1_0_2);
-  mulsd(xmm0, xmm2);
-  addsd(xmm0, xmm2);
-  jmp (B1_5);
-
-  bind(L_2TAG_PACKET_1_0_2);
-  xorpd(xmm3, xmm3);
-  movdqu(xmm4, ExternalAddress(ALLONES));  // 0xffffffffUL, 0xffffffffUL, 0xffffffffUL, 0xffffffffUL
-  movl(edx, -1022);
-  subl(edx, eax);
-  movdl(xmm5, edx);
-  psllq(xmm4, xmm5);
-  movl(ecx, eax);
-  sarl(eax, 1);
-  pinsrw(xmm3, eax, 3);
-  movdqu(xmm6, ExternalAddress(ebias));    // 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0x3ff00000UL
-  psllq(xmm3, 4);
-  psubd(xmm2, xmm3);
-  mulsd(xmm0, xmm2);
-  cmpl(edx, 52);
-  jcc(Assembler::greater, L_2TAG_PACKET_2_0_2);
-  pand(xmm4, xmm2);
-  paddd(xmm3, xmm6);
-  subsd(xmm2, xmm4);
-  addsd(xmm0, xmm2);
-  cmpl(ecx, 1023);
-  jcc(Assembler::greaterEqual, L_2TAG_PACKET_3_0_2);
-  pextrw(ecx, xmm0, 3);
-  andl(ecx, 32768);
-  orl(edx, ecx);
-  cmpl(edx, 0);
-  jcc(Assembler::equal, L_2TAG_PACKET_4_0_2);
-  movapd(xmm6, xmm0);
-  addsd(xmm0, xmm4);
-  mulsd(xmm0, xmm3);
-  pextrw(ecx, xmm0, 3);
-  andl(ecx, 32752);
-  cmpl(ecx, 0);
-  jcc(Assembler::equal, L_2TAG_PACKET_5_0_2);
-  jmp(B1_5);
-
-  bind(L_2TAG_PACKET_5_0_2);
-  mulsd(xmm6, xmm3);
-  mulsd(xmm4, xmm3);
-  movdqu(xmm0, xmm6);
-  pxor(xmm6, xmm4);
-  psrad(xmm6, 31);
-  pshufd(xmm6, xmm6, 85);
-  psllq(xmm0, 1);
-  psrlq(xmm0, 1);
-  pxor(xmm0, xmm6);
-  psrlq(xmm6, 63);
-  paddq(xmm0, xmm6);
-  paddq(xmm0, xmm4);
-  movl(Address(rsp,0), 15);
-  jmp(L_2TAG_PACKET_6_0_2);
-
-  bind(L_2TAG_PACKET_4_0_2);
-  addsd(xmm0, xmm4);
-  mulsd(xmm0, xmm3);
-  jmp(B1_5);
-
-  bind(L_2TAG_PACKET_3_0_2);
-  addsd(xmm0, xmm4);
-  mulsd(xmm0, xmm3);
-  pextrw(ecx, xmm0, 3);
-  andl(ecx, 32752);
-  cmpl(ecx, 32752);
-  jcc(Assembler::aboveEqual, L_2TAG_PACKET_7_0_2);
-  jmp(B1_5);
-
-  bind(L_2TAG_PACKET_2_0_2);
-  paddd(xmm3, xmm6);
-  addpd(xmm0, xmm2);
-  mulsd(xmm0, xmm3);
-  movl(Address(rsp,0), 15);
-  jmp(L_2TAG_PACKET_6_0_2);
-
-  bind(L_2TAG_PACKET_8_0_2);
-  cmpl(eax, 2146435072);
-  jcc(Assembler::aboveEqual, L_2TAG_PACKET_9_0_2);
-  movl(eax, Address(rsp,12));
-  cmpl(eax, INT_MIN);
-  jcc(Assembler::aboveEqual, L_2TAG_PACKET_10_0_2);
-  movsd(xmm0, ExternalAddress(XMAX));      // 0xffffffffUL, 0x7fefffffUL
-  mulsd(xmm0, xmm0);
-
-  bind(L_2TAG_PACKET_7_0_2);
-  movl(Address(rsp,0), 14);
-  jmp(L_2TAG_PACKET_6_0_2);
-
-  bind(L_2TAG_PACKET_10_0_2);
-  movsd(xmm0, ExternalAddress(XMIN));      // 0x00000000UL, 0x00100000UL
-  mulsd(xmm0, xmm0);
-  movl(Address(rsp,0), 15);
-  jmp(L_2TAG_PACKET_6_0_2);
-
-  bind(L_2TAG_PACKET_9_0_2);
-  movl(edx, Address(rsp,8));
-  cmpl(eax, 2146435072);
-  jcc(Assembler::above, L_2TAG_PACKET_11_0_2);
-  cmpl(edx, 0);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_11_0_2);
-  movl(eax, Address(rsp,12));
-  cmpl(eax, 2146435072);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_12_0_2);
-  movsd(xmm0, ExternalAddress(INF));       // 0x00000000UL, 0x7ff00000UL
-  jmp(B1_5);
-
-  bind(L_2TAG_PACKET_12_0_2);
-  movsd(xmm0, ExternalAddress(ZERO));      // 0x00000000UL, 0x00000000UL
-  jmp(B1_5);
-
-  bind(L_2TAG_PACKET_11_0_2);
-  movsd(xmm0, Address(rsp, 8));
-  addsd(xmm0, xmm0);
-  jmp(B1_5);
-
-  bind(L_2TAG_PACKET_0_0_2);
-  movl(eax, Address(rsp, 12));
-  andl(eax, 2147483647);
-  cmpl(eax, 1083179008);
-  jcc(Assembler::aboveEqual, L_2TAG_PACKET_8_0_2);
-  movsd(Address(rsp, 8), xmm0);
-  addsd(xmm0, ExternalAddress(ONE_val));   // 0x00000000UL, 0x3ff00000UL
-  jmp(B1_5);
-
-  bind(L_2TAG_PACKET_6_0_2);
-  movq(Address(rsp, 16), xmm0);
-
-  bind(B1_3);
-  movq(xmm0, Address(rsp, 16));
-
-  bind(B1_5);
-  addq(rsp, 24);
-}
-
-#endif  // _LP64
-
-#ifndef _LP64
-
-ALIGNED_(16) juint _static_const_table[] =
-{
-    0x00000000UL, 0xfff00000UL, 0x00000000UL, 0xfff00000UL, 0xffffffc0UL,
-    0x00000000UL, 0xffffffc0UL, 0x00000000UL, 0x0000ffc0UL, 0x00000000UL,
-    0x0000ffc0UL, 0x00000000UL, 0x00000000UL, 0x43380000UL, 0x00000000UL,
-    0x43380000UL, 0x652b82feUL, 0x40571547UL, 0x652b82feUL, 0x40571547UL,
-    0xfefa0000UL, 0x3f862e42UL, 0xfefa0000UL, 0x3f862e42UL, 0xbc9e3b3aUL,
-    0x3d1cf79aUL, 0xbc9e3b3aUL, 0x3d1cf79aUL, 0xfffffffeUL, 0x3fdfffffUL,
-    0xfffffffeUL, 0x3fdfffffUL, 0xe3289860UL, 0x3f56c15cUL, 0x555b9e25UL,
-    0x3fa55555UL, 0xc090cf0fUL, 0x3f811115UL, 0x55548ba1UL, 0x3fc55555UL,
-    0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x0e03754dUL,
-    0x3cad7bbfUL, 0x3e778060UL, 0x00002c9aUL, 0x3567f613UL, 0x3c8cd252UL,
-    0xd3158574UL, 0x000059b0UL, 0x61e6c861UL, 0x3c60f74eUL, 0x18759bc8UL,
-    0x00008745UL, 0x5d837b6cUL, 0x3c979aa6UL, 0x6cf9890fUL, 0x0000b558UL,
-    0x702f9cd1UL, 0x3c3ebe3dUL, 0x32d3d1a2UL, 0x0000e3ecUL, 0x1e63bcd8UL,
-    0x3ca3516eUL, 0xd0125b50UL, 0x00011301UL, 0x26f0387bUL, 0x3ca4c554UL,
-    0xaea92ddfUL, 0x0001429aUL, 0x62523fb6UL, 0x3ca95153UL, 0x3c7d517aUL,
-    0x000172b8UL, 0x3f1353bfUL, 0x3c8b898cUL, 0xeb6fcb75UL, 0x0001a35bUL,
-    0x3e3a2f5fUL, 0x3c9aecf7UL, 0x3168b9aaUL, 0x0001d487UL, 0x44a6c38dUL,
-    0x3c8a6f41UL, 0x88628cd6UL, 0x0002063bUL, 0xe3a8a894UL, 0x3c968efdUL,
-    0x6e756238UL, 0x0002387aUL, 0x981fe7f2UL, 0x3c80472bUL, 0x65e27cddUL,
-    0x00026b45UL, 0x6d09ab31UL, 0x3c82f7e1UL, 0xf51fdee1UL, 0x00029e9dUL,
-    0x720c0ab3UL, 0x3c8b3782UL, 0xa6e4030bUL, 0x0002d285UL, 0x4db0abb6UL,
-    0x3c834d75UL, 0x0a31b715UL, 0x000306feUL, 0x5dd3f84aUL, 0x3c8fdd39UL,
-    0xb26416ffUL, 0x00033c08UL, 0xcc187d29UL, 0x3ca12f8cUL, 0x373aa9caUL,
-    0x000371a7UL, 0x738b5e8bUL, 0x3ca7d229UL, 0x34e59ff6UL, 0x0003a7dbUL,
-    0xa72a4c6dUL, 0x3c859f48UL, 0x4c123422UL, 0x0003dea6UL, 0x259d9205UL,
-    0x3ca8b846UL, 0x21f72e29UL, 0x0004160aUL, 0x60c2ac12UL, 0x3c4363edUL,
-    0x6061892dUL, 0x00044e08UL, 0xdaa10379UL, 0x3c6ecce1UL, 0xb5c13cd0UL,
-    0x000486a2UL, 0xbb7aafb0UL, 0x3c7690ceUL, 0xd5362a27UL, 0x0004bfdaUL,
-    0x9b282a09UL, 0x3ca083ccUL, 0x769d2ca6UL, 0x0004f9b2UL, 0xc1aae707UL,
-    0x3ca509b0UL, 0x569d4f81UL, 0x0005342bUL, 0x18fdd78eUL, 0x3c933505UL,
-    0x36b527daUL, 0x00056f47UL, 0xe21c5409UL, 0x3c9063e1UL, 0xdd485429UL,
-    0x0005ab07UL, 0x2b64c035UL, 0x3c9432e6UL, 0x15ad2148UL, 0x0005e76fUL,
-    0x99f08c0aUL, 0x3ca01284UL, 0xb03a5584UL, 0x0006247eUL, 0x0073dc06UL,
-    0x3c99f087UL, 0x82552224UL, 0x00066238UL, 0x0da05571UL, 0x3c998d4dUL,
-    0x667f3bccUL, 0x0006a09eUL, 0x86ce4786UL, 0x3ca52bb9UL, 0x3c651a2eUL,
-    0x0006dfb2UL, 0x206f0dabUL, 0x3ca32092UL, 0xe8ec5f73UL, 0x00071f75UL,
-    0x8e17a7a6UL, 0x3ca06122UL, 0x564267c8UL, 0x00075febUL, 0x461e9f86UL,
-    0x3ca244acUL, 0x73eb0186UL, 0x0007a114UL, 0xabd66c55UL, 0x3c65ebe1UL,
-    0x36cf4e62UL, 0x0007e2f3UL, 0xbbff67d0UL, 0x3c96fe9fUL, 0x994cce12UL,
-    0x00082589UL, 0x14c801dfUL, 0x3c951f14UL, 0x9b4492ecUL, 0x000868d9UL,
-    0xc1f0eab4UL, 0x3c8db72fUL, 0x422aa0dbUL, 0x0008ace5UL, 0x59f35f44UL,
-    0x3c7bf683UL, 0x99157736UL, 0x0008f1aeUL, 0x9c06283cUL, 0x3ca360baUL,
-    0xb0cdc5e4UL, 0x00093737UL, 0x20f962aaUL, 0x3c95e8d1UL, 0x9fde4e4fUL,
-    0x00097d82UL, 0x2b91ce27UL, 0x3c71affcUL, 0x82a3f090UL, 0x0009c491UL,
-    0x589a2ebdUL, 0x3c9b6d34UL, 0x7b5de564UL, 0x000a0c66UL, 0x9ab89880UL,
-    0x3c95277cUL, 0xb23e255cUL, 0x000a5503UL, 0x6e735ab3UL, 0x3c846984UL,
-    0x5579fdbfUL, 0x000a9e6bUL, 0x92cb3387UL, 0x3c8c1a77UL, 0x995ad3adUL,
-    0x000ae89fUL, 0xdc2d1d96UL, 0x3ca22466UL, 0xb84f15faUL, 0x000b33a2UL,
-    0xb19505aeUL, 0x3ca1112eUL, 0xf2fb5e46UL, 0x000b7f76UL, 0x0a5fddcdUL,
-    0x3c74ffd7UL, 0x904bc1d2UL, 0x000bcc1eUL, 0x30af0cb3UL, 0x3c736eaeUL,
-    0xdd85529cUL, 0x000c199bUL, 0xd10959acUL, 0x3c84e08fUL, 0x2e57d14bUL,
-    0x000c67f1UL, 0x6c921968UL, 0x3c676b2cUL, 0xdcef9069UL, 0x000cb720UL,
-    0x36df99b3UL, 0x3c937009UL, 0x4a07897bUL, 0x000d072dUL, 0xa63d07a7UL,
-    0x3c74a385UL, 0xdcfba487UL, 0x000d5818UL, 0xd5c192acUL, 0x3c8e5a50UL,
-    0x03db3285UL, 0x000da9e6UL, 0x1c4a9792UL, 0x3c98bb73UL, 0x337b9b5eUL,
-    0x000dfc97UL, 0x603a88d3UL, 0x3c74b604UL, 0xe78b3ff6UL, 0x000e502eUL,
-    0x92094926UL, 0x3c916f27UL, 0xa2a490d9UL, 0x000ea4afUL, 0x41aa2008UL,
-    0x3c8ec3bcUL, 0xee615a27UL, 0x000efa1bUL, 0x31d185eeUL, 0x3c8a64a9UL,
-    0x5b6e4540UL, 0x000f5076UL, 0x4d91cd9dUL, 0x3c77893bUL, 0x819e90d8UL,
-    0x000fa7c1UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0x7ff00000UL,
-    0x00000000UL, 0x00000000UL, 0xffffffffUL, 0x7fefffffUL, 0x00000000UL,
-    0x00100000UL
-};
-
-//registers,
-// input: (rbp + 8)
-// scratch: xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7
-//          rax, rdx, rcx, rbx (tmp)
-
-// Code generated by Intel C compiler for LIBM library
-
-void MacroAssembler::fast_exp(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ecx, Register edx, Register tmp) {
-  Label L_2TAG_PACKET_0_0_2, L_2TAG_PACKET_1_0_2, L_2TAG_PACKET_2_0_2, L_2TAG_PACKET_3_0_2;
-  Label L_2TAG_PACKET_4_0_2, L_2TAG_PACKET_5_0_2, L_2TAG_PACKET_6_0_2, L_2TAG_PACKET_7_0_2;
-  Label L_2TAG_PACKET_8_0_2, L_2TAG_PACKET_9_0_2, L_2TAG_PACKET_10_0_2, L_2TAG_PACKET_11_0_2;
-  Label L_2TAG_PACKET_12_0_2, L_2TAG_PACKET_13_0_2, B1_3, B1_5, start;
-
-  assert_different_registers(tmp, eax, ecx, edx);
-  jmp(start);
-  address static_const_table = (address)_static_const_table;
-
-  bind(start);
-  subl(rsp, 120);
-  movl(Address(rsp, 64), tmp);
-  lea(tmp, ExternalAddress(static_const_table));
-  movdqu(xmm0, Address(rsp, 128));
-  unpcklpd(xmm0, xmm0);
-  movdqu(xmm1, Address(tmp, 64));          // 0x652b82feUL, 0x40571547UL, 0x652b82feUL, 0x40571547UL
-  movdqu(xmm6, Address(tmp, 48));          // 0x00000000UL, 0x43380000UL, 0x00000000UL, 0x43380000UL
-  movdqu(xmm2, Address(tmp, 80));          // 0xfefa0000UL, 0x3f862e42UL, 0xfefa0000UL, 0x3f862e42UL
-  movdqu(xmm3, Address(tmp, 96));          // 0xbc9e3b3aUL, 0x3d1cf79aUL, 0xbc9e3b3aUL, 0x3d1cf79aUL
-  pextrw(eax, xmm0, 3);
-  andl(eax, 32767);
-  movl(edx, 16527);
-  subl(edx, eax);
-  subl(eax, 15504);
-  orl(edx, eax);
-  cmpl(edx, INT_MIN);
-  jcc(Assembler::aboveEqual, L_2TAG_PACKET_0_0_2);
-  mulpd(xmm1, xmm0);
-  addpd(xmm1, xmm6);
-  movapd(xmm7, xmm1);
-  subpd(xmm1, xmm6);
-  mulpd(xmm2, xmm1);
-  movdqu(xmm4, Address(tmp, 128));         // 0xe3289860UL, 0x3f56c15cUL, 0x555b9e25UL, 0x3fa55555UL
-  mulpd(xmm3, xmm1);
-  movdqu(xmm5, Address(tmp, 144));         // 0xc090cf0fUL, 0x3f811115UL, 0x55548ba1UL, 0x3fc55555UL
-  subpd(xmm0, xmm2);
-  movdl(eax, xmm7);
-  movl(ecx, eax);
-  andl(ecx, 63);
-  shll(ecx, 4);
-  sarl(eax, 6);
-  movl(edx, eax);
-  movdqu(xmm6, Address(tmp, 16));          // 0xffffffc0UL, 0x00000000UL, 0xffffffc0UL, 0x00000000UL
-  pand(xmm7, xmm6);
-  movdqu(xmm6, Address(tmp, 32));          // 0x0000ffc0UL, 0x00000000UL, 0x0000ffc0UL, 0x00000000UL
-  paddq(xmm7, xmm6);
-  psllq(xmm7, 46);
-  subpd(xmm0, xmm3);
-  movdqu(xmm2, Address(tmp, ecx, Address::times_1, 160));
-  mulpd(xmm4, xmm0);
-  movapd(xmm6, xmm0);
-  movapd(xmm1, xmm0);
-  mulpd(xmm6, xmm6);
-  mulpd(xmm0, xmm6);
-  addpd(xmm5, xmm4);
-  mulsd(xmm0, xmm6);
-  mulpd(xmm6, Address(tmp, 112));          // 0xfffffffeUL, 0x3fdfffffUL, 0xfffffffeUL, 0x3fdfffffUL
-  addsd(xmm1, xmm2);
-  unpckhpd(xmm2, xmm2);
-  mulpd(xmm0, xmm5);
-  addsd(xmm1, xmm0);
-  por(xmm2, xmm7);
-  unpckhpd(xmm0, xmm0);
-  addsd(xmm0, xmm1);
-  addsd(xmm0, xmm6);
-  addl(edx, 894);
-  cmpl(edx, 1916);
-  jcc (Assembler::above, L_2TAG_PACKET_1_0_2);
-  mulsd(xmm0, xmm2);
-  addsd(xmm0, xmm2);
-  jmp(L_2TAG_PACKET_2_0_2);
-
-  bind(L_2TAG_PACKET_1_0_2);
-  fnstcw(Address(rsp, 24));
-  movzwl(edx, Address(rsp, 24));
-  orl(edx, 768);
-  movw(Address(rsp, 28), edx);
-  fldcw(Address(rsp, 28));
-  movl(edx, eax);
-  sarl(eax, 1);
-  subl(edx, eax);
-  movdqu(xmm6, Address(tmp, 0));           // 0x00000000UL, 0xfff00000UL, 0x00000000UL, 0xfff00000UL
-  pandn(xmm6, xmm2);
-  addl(eax, 1023);
-  movdl(xmm3, eax);
-  psllq(xmm3, 52);
-  por(xmm6, xmm3);
-  addl(edx, 1023);
-  movdl(xmm4, edx);
-  psllq(xmm4, 52);
-  movsd(Address(rsp, 8), xmm0);
-  fld_d(Address(rsp, 8));
-  movsd(Address(rsp, 16), xmm6);
-  fld_d(Address(rsp, 16));
-  fmula(1);
-  faddp(1);
-  movsd(Address(rsp, 8), xmm4);
-  fld_d(Address(rsp, 8));
-  fmulp(1);
-  fstp_d(Address(rsp, 8));
-  movsd(xmm0,Address(rsp, 8));
-  fldcw(Address(rsp, 24));
-  pextrw(ecx, xmm0, 3);
-  andl(ecx, 32752);
-  cmpl(ecx, 32752);
-  jcc(Assembler::greaterEqual, L_2TAG_PACKET_3_0_2);
-  cmpl(ecx, 0);
-  jcc(Assembler::equal, L_2TAG_PACKET_4_0_2);
-  jmp(L_2TAG_PACKET_2_0_2);
-  cmpl(ecx, INT_MIN);
-  jcc(Assembler::less, L_2TAG_PACKET_3_0_2);
-  cmpl(ecx, -1064950997);
-  jcc(Assembler::less, L_2TAG_PACKET_2_0_2);
-  jcc(Assembler::greater, L_2TAG_PACKET_4_0_2);
-  movl(edx, Address(rsp, 128));
-  cmpl(edx ,-17155601);
-  jcc(Assembler::less, L_2TAG_PACKET_2_0_2);
-  jmp(L_2TAG_PACKET_4_0_2);
-
-  bind(L_2TAG_PACKET_3_0_2);
-  movl(edx, 14);
-  jmp(L_2TAG_PACKET_5_0_2);
-
-  bind(L_2TAG_PACKET_4_0_2);
-  movl(edx, 15);
-
-  bind(L_2TAG_PACKET_5_0_2);
-  movsd(Address(rsp, 0), xmm0);
-  movsd(xmm0, Address(rsp, 128));
-  fld_d(Address(rsp, 0));
-  jmp(L_2TAG_PACKET_6_0_2);
-
-  bind(L_2TAG_PACKET_7_0_2);
-  cmpl(eax, 2146435072);
-  jcc(Assembler::greaterEqual, L_2TAG_PACKET_8_0_2);
-  movl(eax, Address(rsp, 132));
-  cmpl(eax, INT_MIN);
-  jcc(Assembler::greaterEqual, L_2TAG_PACKET_9_0_2);
-  movsd(xmm0, Address(tmp, 1208));         // 0xffffffffUL, 0x7fefffffUL
-  mulsd(xmm0, xmm0);
-  movl(edx, 14);
-  jmp(L_2TAG_PACKET_5_0_2);
-
-  bind(L_2TAG_PACKET_9_0_2);
-  movsd(xmm0, Address(tmp, 1216));
-  mulsd(xmm0, xmm0);
-  movl(edx, 15);
-  jmp(L_2TAG_PACKET_5_0_2);
-
-  bind(L_2TAG_PACKET_8_0_2);
-  movl(edx, Address(rsp, 128));
-  cmpl(eax, 2146435072);
-  jcc(Assembler::above, L_2TAG_PACKET_10_0_2);
-  cmpl(edx, 0);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_10_0_2);
-  movl(eax, Address(rsp, 132));
-  cmpl(eax, 2146435072);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_11_0_2);
-  movsd(xmm0, Address(tmp, 1192));         // 0x00000000UL, 0x7ff00000UL
-  jmp(L_2TAG_PACKET_2_0_2);
-
-  bind(L_2TAG_PACKET_11_0_2);
-  movsd(xmm0, Address(tmp, 1200));         // 0x00000000UL, 0x00000000UL
-  jmp(L_2TAG_PACKET_2_0_2);
-
-  bind(L_2TAG_PACKET_10_0_2);
-  movsd(xmm0, Address(rsp, 128));
-  addsd(xmm0, xmm0);
-  jmp(L_2TAG_PACKET_2_0_2);
-
-  bind(L_2TAG_PACKET_0_0_2);
-  movl(eax, Address(rsp, 132));
-  andl(eax, 2147483647);
-  cmpl(eax, 1083179008);
-  jcc(Assembler::aboveEqual, L_2TAG_PACKET_7_0_2);
-  movsd(xmm0, Address(rsp, 128));
-  addsd(xmm0, Address(tmp, 1184));         // 0x00000000UL, 0x3ff00000UL
-  jmp(L_2TAG_PACKET_2_0_2);
-
-  bind(L_2TAG_PACKET_2_0_2);
-  movsd(Address(rsp, 48), xmm0);
-  fld_d(Address(rsp, 48));
-
-  bind(L_2TAG_PACKET_6_0_2);
-  movl(tmp, Address(rsp, 64));
-}
-
-#endif  // !_LP64
-
-/******************************************************************************/
-//                     ALGORITHM DESCRIPTION - LOG()
-//                     ---------------------
-//
-//    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
-//
-/******************************************************************************/
-
-#ifdef _LP64
-
-ALIGNED_(16) juint _L_tbl[] =
-{
-  0xfefa3800UL, 0x3fe62e42UL, 0x93c76730UL, 0x3d2ef357UL, 0xaa241800UL,
-  0x3fe5ee82UL, 0x0cda46beUL, 0x3d220238UL, 0x5c364800UL, 0x3fe5af40UL,
-  0xac10c9fbUL, 0x3d2dfa63UL, 0x26bb8c00UL, 0x3fe5707aUL, 0xff3303ddUL,
-  0x3d09980bUL, 0x26867800UL, 0x3fe5322eUL, 0x5d257531UL, 0x3d05ccc4UL,
-  0x835a5000UL, 0x3fe4f45aUL, 0x6d93b8fbUL, 0xbd2e6c51UL, 0x6f970c00UL,
-  0x3fe4b6fdUL, 0xed4c541cUL, 0x3cef7115UL, 0x27e8a400UL, 0x3fe47a15UL,
-  0xf94d60aaUL, 0xbd22cb6aUL, 0xf2f92400UL, 0x3fe43d9fUL, 0x481051f7UL,
-  0xbcfd984fUL, 0x2125cc00UL, 0x3fe4019cUL, 0x30f0c74cUL, 0xbd26ce79UL,
-  0x0c36c000UL, 0x3fe3c608UL, 0x7cfe13c2UL, 0xbd02b736UL, 0x17197800UL,
-  0x3fe38ae2UL, 0xbb5569a4UL, 0xbd218b7aUL, 0xad9d8c00UL, 0x3fe35028UL,
-  0x9527e6acUL, 0x3d10b83fUL, 0x44340800UL, 0x3fe315daUL, 0xc5a0ed9cUL,
-  0xbd274e93UL, 0x57b0e000UL, 0x3fe2dbf5UL, 0x07b9dc11UL, 0xbd17a6e5UL,
-  0x6d0ec000UL, 0x3fe2a278UL, 0xe797882dUL, 0x3d206d2bUL, 0x1134dc00UL,
-  0x3fe26962UL, 0x05226250UL, 0xbd0b61f1UL, 0xd8bebc00UL, 0x3fe230b0UL,
-  0x6e48667bUL, 0x3d12fc06UL, 0x5fc61800UL, 0x3fe1f863UL, 0xc9fe81d3UL,
-  0xbd2a7242UL, 0x49ae6000UL, 0x3fe1c078UL, 0xed70e667UL, 0x3cccacdeUL,
-  0x40f23c00UL, 0x3fe188eeUL, 0xf8ab4650UL, 0x3d14cc4eUL, 0xf6f29800UL,
-  0x3fe151c3UL, 0xa293ae49UL, 0xbd2edd97UL, 0x23c75c00UL, 0x3fe11af8UL,
-  0xbb9ddcb2UL, 0xbd258647UL, 0x8611cc00UL, 0x3fe0e489UL, 0x07801742UL,
-  0x3d1c2998UL, 0xe2d05400UL, 0x3fe0ae76UL, 0x887e7e27UL, 0x3d1f486bUL,
-  0x0533c400UL, 0x3fe078bfUL, 0x41edf5fdUL, 0x3d268122UL, 0xbe760400UL,
-  0x3fe04360UL, 0xe79539e0UL, 0xbd04c45fUL, 0xe5b20800UL, 0x3fe00e5aUL,
-  0xb1727b1cUL, 0xbd053ba3UL, 0xaf7a4800UL, 0x3fdfb358UL, 0x3c164935UL,
-  0x3d0085faUL, 0xee031800UL, 0x3fdf4aa7UL, 0x6f014a8bUL, 0x3d12cde5UL,
-  0x56b41000UL, 0x3fdee2a1UL, 0x5a470251UL, 0x3d2f27f4UL, 0xc3ddb000UL,
-  0x3fde7b42UL, 0x5372bd08UL, 0xbd246550UL, 0x1a272800UL, 0x3fde148aUL,
-  0x07322938UL, 0xbd1326b2UL, 0x484c9800UL, 0x3fddae75UL, 0x60dc616aUL,
-  0xbd1ea42dUL, 0x46def800UL, 0x3fdd4902UL, 0xe9a767a8UL, 0x3d235bafUL,
-  0x18064800UL, 0x3fdce42fUL, 0x3ec7a6b0UL, 0xbd0797c3UL, 0xc7455800UL,
-  0x3fdc7ff9UL, 0xc15249aeUL, 0xbd29b6ddUL, 0x693fa000UL, 0x3fdc1c60UL,
-  0x7fe8e180UL, 0x3d2cec80UL, 0x1b80e000UL, 0x3fdbb961UL, 0xf40a666dUL,
-  0x3d27d85bUL, 0x04462800UL, 0x3fdb56faUL, 0x2d841995UL, 0x3d109525UL,
-  0x5248d000UL, 0x3fdaf529UL, 0x52774458UL, 0xbd217cc5UL, 0x3c8ad800UL,
-  0x3fda93edUL, 0xbea77a5dUL, 0x3d1e36f2UL, 0x0224f800UL, 0x3fda3344UL,
-  0x7f9d79f5UL, 0x3d23c645UL, 0xea15f000UL, 0x3fd9d32bUL, 0x10d0c0b0UL,
-  0xbd26279eUL, 0x43135800UL, 0x3fd973a3UL, 0xa502d9f0UL, 0xbd152313UL,
-  0x635bf800UL, 0x3fd914a8UL, 0x2ee6307dUL, 0xbd1766b5UL, 0xa88b3000UL,
-  0x3fd8b639UL, 0xe5e70470UL, 0xbd205ae1UL, 0x776dc800UL, 0x3fd85855UL,
-  0x3333778aUL, 0x3d2fd56fUL, 0x3bd81800UL, 0x3fd7fafaUL, 0xc812566aUL,
-  0xbd272090UL, 0x687cf800UL, 0x3fd79e26UL, 0x2efd1778UL, 0x3d29ec7dUL,
-  0x76c67800UL, 0x3fd741d8UL, 0x49dc60b3UL, 0x3d2d8b09UL, 0xe6af1800UL,
-  0x3fd6e60eUL, 0x7c222d87UL, 0x3d172165UL, 0x3e9c6800UL, 0x3fd68ac8UL,
-  0x2756eba0UL, 0x3d20a0d3UL, 0x0b3ab000UL, 0x3fd63003UL, 0xe731ae00UL,
-  0xbd2db623UL, 0xdf596000UL, 0x3fd5d5bdUL, 0x08a465dcUL, 0xbd0a0b2aUL,
-  0x53c8d000UL, 0x3fd57bf7UL, 0xee5d40efUL, 0x3d1fadedUL, 0x0738a000UL,
-  0x3fd522aeUL, 0x8164c759UL, 0x3d2ebe70UL, 0x9e173000UL, 0x3fd4c9e0UL,
-  0x1b0ad8a4UL, 0xbd2e2089UL, 0xc271c800UL, 0x3fd4718dUL, 0x0967d675UL,
-  0xbd2f27ceUL, 0x23d5e800UL, 0x3fd419b4UL, 0xec90e09dUL, 0x3d08e436UL,
-  0x77333000UL, 0x3fd3c252UL, 0xb606bd5cUL, 0x3d183b54UL, 0x76be1000UL,
-  0x3fd36b67UL, 0xb0f177c8UL, 0x3d116ecdUL, 0xe1d36000UL, 0x3fd314f1UL,
-  0xd3213cb8UL, 0xbd28e27aUL, 0x7cdc9000UL, 0x3fd2bef0UL, 0x4a5004f4UL,
-  0x3d2a9cfaUL, 0x1134d800UL, 0x3fd26962UL, 0xdf5bb3b6UL, 0x3d2c93c1UL,
-  0x6d0eb800UL, 0x3fd21445UL, 0xba46baeaUL, 0x3d0a87deUL, 0x635a6800UL,
-  0x3fd1bf99UL, 0x5147bdb7UL, 0x3d2ca6edUL, 0xcbacf800UL, 0x3fd16b5cUL,
-  0xf7a51681UL, 0x3d2b9acdUL, 0x8227e800UL, 0x3fd1178eUL, 0x63a5f01cUL,
-  0xbd2c210eUL, 0x67616000UL, 0x3fd0c42dUL, 0x163ceae9UL, 0x3d27188bUL,
-  0x604d5800UL, 0x3fd07138UL, 0x16ed4e91UL, 0x3cf89cdbUL, 0x5626c800UL,
-  0x3fd01eaeUL, 0x1485e94aUL, 0xbd16f08cUL, 0x6cb3b000UL, 0x3fcf991cUL,
-  0xca0cdf30UL, 0x3d1bcbecUL, 0xe4dd0000UL, 0x3fcef5adUL, 0x65bb8e11UL,
-  0xbcca2115UL, 0xffe71000UL, 0x3fce530eUL, 0x6041f430UL, 0x3cc21227UL,
-  0xb0d49000UL, 0x3fcdb13dUL, 0xf715b035UL, 0xbd2aff2aUL, 0xf2656000UL,
-  0x3fcd1037UL, 0x75b6f6e4UL, 0xbd084a7eUL, 0xc6f01000UL, 0x3fcc6ffbUL,
-  0xc5962bd2UL, 0xbcf1ec72UL, 0x383be000UL, 0x3fcbd087UL, 0x595412b6UL,
-  0xbd2d4bc4UL, 0x575bd000UL, 0x3fcb31d8UL, 0x4eace1aaUL, 0xbd0c358dUL,
-  0x3c8ae000UL, 0x3fca93edUL, 0x50562169UL, 0xbd287243UL, 0x07089000UL,
-  0x3fc9f6c4UL, 0x6865817aUL, 0x3d29904dUL, 0xdcf70000UL, 0x3fc95a5aUL,
-  0x58a0ff6fUL, 0x3d07f228UL, 0xeb390000UL, 0x3fc8beafUL, 0xaae92cd1UL,
-  0xbd073d54UL, 0x6551a000UL, 0x3fc823c1UL, 0x9a631e83UL, 0x3d1e0ddbUL,
-  0x85445000UL, 0x3fc7898dUL, 0x70914305UL, 0xbd1c6610UL, 0x8b757000UL,
-  0x3fc6f012UL, 0xe59c21e1UL, 0xbd25118dUL, 0xbe8c1000UL, 0x3fc6574eUL,
-  0x2c3c2e78UL, 0x3d19cf8bUL, 0x6b544000UL, 0x3fc5bf40UL, 0xeb68981cUL,
-  0xbd127023UL, 0xe4a1b000UL, 0x3fc527e5UL, 0xe5697dc7UL, 0x3d2633e8UL,
-  0x8333b000UL, 0x3fc4913dUL, 0x54fdb678UL, 0x3d258379UL, 0xa5993000UL,
-  0x3fc3fb45UL, 0x7e6a354dUL, 0xbd2cd1d8UL, 0xb0159000UL, 0x3fc365fcUL,
-  0x234b7289UL, 0x3cc62fa8UL, 0x0c868000UL, 0x3fc2d161UL, 0xcb81b4a1UL,
-  0x3d039d6cUL, 0x2a49c000UL, 0x3fc23d71UL, 0x8fd3df5cUL, 0x3d100d23UL,
-  0x7e23f000UL, 0x3fc1aa2bUL, 0x44389934UL, 0x3d2ca78eUL, 0x8227e000UL,
-  0x3fc1178eUL, 0xce2d07f2UL, 0x3d21ef78UL, 0xb59e4000UL, 0x3fc08598UL,
-  0x7009902cUL, 0xbd27e5ddUL, 0x39dbe000UL, 0x3fbfe891UL, 0x4fa10afdUL,
-  0xbd2534d6UL, 0x830a2000UL, 0x3fbec739UL, 0xafe645e0UL, 0xbd2dc068UL,
-  0x63844000UL, 0x3fbda727UL, 0x1fa71733UL, 0x3d1a8940UL, 0x01bc4000UL,
-  0x3fbc8858UL, 0xc65aacd3UL, 0x3d2646d1UL, 0x8dad6000UL, 0x3fbb6ac8UL,
-  0x2bf768e5UL, 0xbd139080UL, 0x40b1c000UL, 0x3fba4e76UL, 0xb94407c8UL,
-  0xbd0e42b6UL, 0x5d594000UL, 0x3fb9335eUL, 0x3abd47daUL, 0x3d23115cUL,
-  0x2f40e000UL, 0x3fb8197eUL, 0xf96ffdf7UL, 0x3d0f80dcUL, 0x0aeac000UL,
-  0x3fb700d3UL, 0xa99ded32UL, 0x3cec1e8dUL, 0x4d97a000UL, 0x3fb5e95aUL,
-  0x3c5d1d1eUL, 0xbd2c6906UL, 0x5d208000UL, 0x3fb4d311UL, 0x82f4e1efUL,
-  0xbcf53a25UL, 0xa7d1e000UL, 0x3fb3bdf5UL, 0xa5db4ed7UL, 0x3d2cc85eUL,
-  0xa4472000UL, 0x3fb2aa04UL, 0xae9c697dUL, 0xbd20b6e8UL, 0xd1466000UL,
-  0x3fb1973bUL, 0x560d9e9bUL, 0xbd25325dUL, 0xb59e4000UL, 0x3fb08598UL,
-  0x7009902cUL, 0xbd17e5ddUL, 0xc006c000UL, 0x3faeea31UL, 0x4fc93b7bUL,
-  0xbd0e113eUL, 0xcdddc000UL, 0x3faccb73UL, 0x47d82807UL, 0xbd1a68f2UL,
-  0xd0fb0000UL, 0x3faaaef2UL, 0x353bb42eUL, 0x3d20fc1aUL, 0x149fc000UL,
-  0x3fa894aaUL, 0xd05a267dUL, 0xbd197995UL, 0xf2d4c000UL, 0x3fa67c94UL,
-  0xec19afa2UL, 0xbd029efbUL, 0xd42e0000UL, 0x3fa466aeUL, 0x75bdfd28UL,
-  0xbd2c1673UL, 0x2f8d0000UL, 0x3fa252f3UL, 0xe021b67bUL, 0x3d283e9aUL,
-  0x89e74000UL, 0x3fa0415dUL, 0x5cf1d753UL, 0x3d0111c0UL, 0xec148000UL,
-  0x3f9c63d2UL, 0x3f9eb2f3UL, 0x3d2578c6UL, 0x28c90000UL, 0x3f984925UL,
-  0x325a0c34UL, 0xbd2aa0baUL, 0x25980000UL, 0x3f9432a9UL, 0x928637feUL,
-  0x3d098139UL, 0x58938000UL, 0x3f902056UL, 0x06e2f7d2UL, 0xbd23dc5bUL,
-  0xa3890000UL, 0x3f882448UL, 0xda74f640UL, 0xbd275577UL, 0x75890000UL,
-  0x3f801015UL, 0x999d2be8UL, 0xbd10c76bUL, 0x59580000UL, 0x3f700805UL,
-  0xcb31c67bUL, 0x3d2166afUL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
-  0x80000000UL
-};
-
-ALIGNED_(16) juint _log2[] =
-{
-  0xfefa3800UL, 0x3fa62e42UL, 0x93c76730UL, 0x3ceef357UL
-};
-
-ALIGNED_(16) juint _coeff[] =
-{
-  0x92492492UL, 0x3fc24924UL, 0x00000000UL, 0xbfd00000UL, 0x3d6fb175UL,
-  0xbfc5555eUL, 0x55555555UL, 0x3fd55555UL, 0x9999999aUL, 0x3fc99999UL,
-  0x00000000UL, 0xbfe00000UL
-};
-
-//registers,
-// input: xmm0
-// scratch: xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7
-//          rax, rdx, rcx, r8, r11
-
-void MacroAssembler::fast_log(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ecx, Register edx, Register tmp1, Register tmp2) {
-  Label L_2TAG_PACKET_0_0_2, L_2TAG_PACKET_1_0_2, L_2TAG_PACKET_2_0_2, L_2TAG_PACKET_3_0_2;
-  Label L_2TAG_PACKET_4_0_2, L_2TAG_PACKET_5_0_2, L_2TAG_PACKET_6_0_2, L_2TAG_PACKET_7_0_2;
-  Label L_2TAG_PACKET_8_0_2;
-  Label L_2TAG_PACKET_12_0_2, L_2TAG_PACKET_13_0_2, B1_3, B1_5, start;
-
-  assert_different_registers(tmp1, tmp2, eax, ecx, edx);
-  jmp(start);
-  address L_tbl = (address)_L_tbl;
-  address log2 = (address)_log2;
-  address coeff = (address)_coeff;
-
-  bind(start);
-  subq(rsp, 24);
-  movsd(Address(rsp, 0), xmm0);
-  mov64(rax, 0x3ff0000000000000);
-  movdq(xmm2, rax);
-  mov64(rdx, 0x77f0000000000000);
-  movdq(xmm3, rdx);
-  movl(ecx, 32768);
-  movdl(xmm4, rcx);
-  mov64(tmp1, 0xffffe00000000000);
-  movdq(xmm5, tmp1);
-  movdqu(xmm1, xmm0);
-  pextrw(eax, xmm0, 3);
-  por(xmm0, xmm2);
-  movl(ecx, 16352);
-  psrlq(xmm0, 27);
-  lea(tmp2, ExternalAddress(L_tbl));
-  psrld(xmm0, 2);
-  rcpps(xmm0, xmm0);
-  psllq(xmm1, 12);
-  pshufd(xmm6, xmm5, 228);
-  psrlq(xmm1, 12);
-  subl(eax, 16);
-  cmpl(eax, 32736);
-  jcc(Assembler::aboveEqual, L_2TAG_PACKET_0_0_2);
-
-  bind(L_2TAG_PACKET_1_0_2);
-  paddd(xmm0, xmm4);
-  por(xmm1, xmm3);
-  movdl(edx, xmm0);
-  psllq(xmm0, 29);
-  pand(xmm5, xmm1);
-  pand(xmm0, xmm6);
-  subsd(xmm1, xmm5);
-  mulpd(xmm5, xmm0);
-  andl(eax, 32752);
-  subl(eax, ecx);
-  cvtsi2sdl(xmm7, eax);
-  mulsd(xmm1, xmm0);
-  movq(xmm6, ExternalAddress(log2));       // 0xfefa3800UL, 0x3fa62e42UL
-  movdqu(xmm3, ExternalAddress(coeff));    // 0x92492492UL, 0x3fc24924UL, 0x00000000UL, 0xbfd00000UL
-  subsd(xmm5, xmm2);
-  andl(edx, 16711680);
-  shrl(edx, 12);
-  movdqu(xmm0, Address(tmp2, edx));
-  movdqu(xmm4, ExternalAddress(16 + coeff)); // 0x3d6fb175UL, 0xbfc5555eUL, 0x55555555UL, 0x3fd55555UL
-  addsd(xmm1, xmm5);
-  movdqu(xmm2, ExternalAddress(32 + coeff)); // 0x9999999aUL, 0x3fc99999UL, 0x00000000UL, 0xbfe00000UL
-  mulsd(xmm6, xmm7);
-  if (VM_Version::supports_sse3()) {
-    movddup(xmm5, xmm1);
-  } else {
-    movdqu(xmm5, xmm1);
-    movlhps(xmm5, xmm5);
-  }
-  mulsd(xmm7, ExternalAddress(8 + log2));    // 0x93c76730UL, 0x3ceef357UL
-  mulsd(xmm3, xmm1);
-  addsd(xmm0, xmm6);
-  mulpd(xmm4, xmm5);
-  mulpd(xmm5, xmm5);
-  if (VM_Version::supports_sse3()) {
-    movddup(xmm6, xmm0);
-  } else {
-    movdqu(xmm6, xmm0);
-    movlhps(xmm6, xmm6);
-  }
-  addsd(xmm0, xmm1);
-  addpd(xmm4, xmm2);
-  mulpd(xmm3, xmm5);
-  subsd(xmm6, xmm0);
-  mulsd(xmm4, xmm1);
-  pshufd(xmm2, xmm0, 238);
-  addsd(xmm1, xmm6);
-  mulsd(xmm5, xmm5);
-  addsd(xmm7, xmm2);
-  addpd(xmm4, xmm3);
-  addsd(xmm1, xmm7);
-  mulpd(xmm4, xmm5);
-  addsd(xmm1, xmm4);
-  pshufd(xmm5, xmm4, 238);
-  addsd(xmm1, xmm5);
-  addsd(xmm0, xmm1);
-  jmp(B1_5);
-
-  bind(L_2TAG_PACKET_0_0_2);
-  movq(xmm0, Address(rsp, 0));
-  movq(xmm1, Address(rsp, 0));
-  addl(eax, 16);
-  cmpl(eax, 32768);
-  jcc(Assembler::aboveEqual, L_2TAG_PACKET_2_0_2);
-  cmpl(eax, 16);
-  jcc(Assembler::below, L_2TAG_PACKET_3_0_2);
-
-  bind(L_2TAG_PACKET_4_0_2);
-  addsd(xmm0, xmm0);
-  jmp(B1_5);
-
-  bind(L_2TAG_PACKET_5_0_2);
-  jcc(Assembler::above, L_2TAG_PACKET_4_0_2);
-  cmpl(edx, 0);
-  jcc(Assembler::above, L_2TAG_PACKET_4_0_2);
-  jmp(L_2TAG_PACKET_6_0_2);
-
-  bind(L_2TAG_PACKET_3_0_2);
-  xorpd(xmm1, xmm1);
-  addsd(xmm1, xmm0);
-  movdl(edx, xmm1);
-  psrlq(xmm1, 32);
-  movdl(ecx, xmm1);
-  orl(edx, ecx);
-  cmpl(edx, 0);
-  jcc(Assembler::equal, L_2TAG_PACKET_7_0_2);
-  xorpd(xmm1, xmm1);
-  movl(eax, 18416);
-  pinsrw(xmm1, eax, 3);
-  mulsd(xmm0, xmm1);
-  movdqu(xmm1, xmm0);
-  pextrw(eax, xmm0, 3);
-  por(xmm0, xmm2);
-  psrlq(xmm0, 27);
-  movl(ecx, 18416);
-  psrld(xmm0, 2);
-  rcpps(xmm0, xmm0);
-  psllq(xmm1, 12);
-  pshufd(xmm6, xmm5, 228);
-  psrlq(xmm1, 12);
-  jmp(L_2TAG_PACKET_1_0_2);
-
-  bind(L_2TAG_PACKET_2_0_2);
-  movdl(edx, xmm1);
-  psrlq(xmm1, 32);
-  movdl(ecx, xmm1);
-  addl(ecx, ecx);
-  cmpl(ecx, -2097152);
-  jcc(Assembler::aboveEqual, L_2TAG_PACKET_5_0_2);
-  orl(edx, ecx);
-  cmpl(edx, 0);
-  jcc(Assembler::equal, L_2TAG_PACKET_7_0_2);
-
-  bind(L_2TAG_PACKET_6_0_2);
-  xorpd(xmm1, xmm1);
-  xorpd(xmm0, xmm0);
-  movl(eax, 32752);
-  pinsrw(xmm1, eax, 3);
-  mulsd(xmm0, xmm1);
-  movl(Address(rsp, 16), 3);
-  jmp(L_2TAG_PACKET_8_0_2);
-  bind(L_2TAG_PACKET_7_0_2);
-  xorpd(xmm1, xmm1);
-  xorpd(xmm0, xmm0);
-  movl(eax, 49136);
-  pinsrw(xmm0, eax, 3);
-  divsd(xmm0, xmm1);
-  movl(Address(rsp, 16), 2);
-
-  bind(L_2TAG_PACKET_8_0_2);
-  movq(Address(rsp, 8), xmm0);
-
-  bind(B1_3);
-  movq(xmm0, Address(rsp, 8));
-
-  bind(B1_5);
-  addq(rsp, 24);
-}
-
-#endif // _LP64
-
-#ifndef _LP64
-
-ALIGNED_(16) juint _static_const_table_log[] =
-{
-  0xfefa3800UL, 0x3fe62e42UL, 0x93c76730UL, 0x3d2ef357UL, 0xaa241800UL,
-  0x3fe5ee82UL, 0x0cda46beUL, 0x3d220238UL, 0x5c364800UL, 0x3fe5af40UL,
-  0xac10c9fbUL, 0x3d2dfa63UL, 0x26bb8c00UL, 0x3fe5707aUL, 0xff3303ddUL,
-  0x3d09980bUL, 0x26867800UL, 0x3fe5322eUL, 0x5d257531UL, 0x3d05ccc4UL,
-  0x835a5000UL, 0x3fe4f45aUL, 0x6d93b8fbUL, 0xbd2e6c51UL, 0x6f970c00UL,
-  0x3fe4b6fdUL, 0xed4c541cUL, 0x3cef7115UL, 0x27e8a400UL, 0x3fe47a15UL,
-  0xf94d60aaUL, 0xbd22cb6aUL, 0xf2f92400UL, 0x3fe43d9fUL, 0x481051f7UL,
-  0xbcfd984fUL, 0x2125cc00UL, 0x3fe4019cUL, 0x30f0c74cUL, 0xbd26ce79UL,
-  0x0c36c000UL, 0x3fe3c608UL, 0x7cfe13c2UL, 0xbd02b736UL, 0x17197800UL,
-  0x3fe38ae2UL, 0xbb5569a4UL, 0xbd218b7aUL, 0xad9d8c00UL, 0x3fe35028UL,
-  0x9527e6acUL, 0x3d10b83fUL, 0x44340800UL, 0x3fe315daUL, 0xc5a0ed9cUL,
-  0xbd274e93UL, 0x57b0e000UL, 0x3fe2dbf5UL, 0x07b9dc11UL, 0xbd17a6e5UL,
-  0x6d0ec000UL, 0x3fe2a278UL, 0xe797882dUL, 0x3d206d2bUL, 0x1134dc00UL,
-  0x3fe26962UL, 0x05226250UL, 0xbd0b61f1UL, 0xd8bebc00UL, 0x3fe230b0UL,
-  0x6e48667bUL, 0x3d12fc06UL, 0x5fc61800UL, 0x3fe1f863UL, 0xc9fe81d3UL,
-  0xbd2a7242UL, 0x49ae6000UL, 0x3fe1c078UL, 0xed70e667UL, 0x3cccacdeUL,
-  0x40f23c00UL, 0x3fe188eeUL, 0xf8ab4650UL, 0x3d14cc4eUL, 0xf6f29800UL,
-  0x3fe151c3UL, 0xa293ae49UL, 0xbd2edd97UL, 0x23c75c00UL, 0x3fe11af8UL,
-  0xbb9ddcb2UL, 0xbd258647UL, 0x8611cc00UL, 0x3fe0e489UL, 0x07801742UL,
-  0x3d1c2998UL, 0xe2d05400UL, 0x3fe0ae76UL, 0x887e7e27UL, 0x3d1f486bUL,
-  0x0533c400UL, 0x3fe078bfUL, 0x41edf5fdUL, 0x3d268122UL, 0xbe760400UL,
-  0x3fe04360UL, 0xe79539e0UL, 0xbd04c45fUL, 0xe5b20800UL, 0x3fe00e5aUL,
-  0xb1727b1cUL, 0xbd053ba3UL, 0xaf7a4800UL, 0x3fdfb358UL, 0x3c164935UL,
-  0x3d0085faUL, 0xee031800UL, 0x3fdf4aa7UL, 0x6f014a8bUL, 0x3d12cde5UL,
-  0x56b41000UL, 0x3fdee2a1UL, 0x5a470251UL, 0x3d2f27f4UL, 0xc3ddb000UL,
-  0x3fde7b42UL, 0x5372bd08UL, 0xbd246550UL, 0x1a272800UL, 0x3fde148aUL,
-  0x07322938UL, 0xbd1326b2UL, 0x484c9800UL, 0x3fddae75UL, 0x60dc616aUL,
-  0xbd1ea42dUL, 0x46def800UL, 0x3fdd4902UL, 0xe9a767a8UL, 0x3d235bafUL,
-  0x18064800UL, 0x3fdce42fUL, 0x3ec7a6b0UL, 0xbd0797c3UL, 0xc7455800UL,
-  0x3fdc7ff9UL, 0xc15249aeUL, 0xbd29b6ddUL, 0x693fa000UL, 0x3fdc1c60UL,
-  0x7fe8e180UL, 0x3d2cec80UL, 0x1b80e000UL, 0x3fdbb961UL, 0xf40a666dUL,
-  0x3d27d85bUL, 0x04462800UL, 0x3fdb56faUL, 0x2d841995UL, 0x3d109525UL,
-  0x5248d000UL, 0x3fdaf529UL, 0x52774458UL, 0xbd217cc5UL, 0x3c8ad800UL,
-  0x3fda93edUL, 0xbea77a5dUL, 0x3d1e36f2UL, 0x0224f800UL, 0x3fda3344UL,
-  0x7f9d79f5UL, 0x3d23c645UL, 0xea15f000UL, 0x3fd9d32bUL, 0x10d0c0b0UL,
-  0xbd26279eUL, 0x43135800UL, 0x3fd973a3UL, 0xa502d9f0UL, 0xbd152313UL,
-  0x635bf800UL, 0x3fd914a8UL, 0x2ee6307dUL, 0xbd1766b5UL, 0xa88b3000UL,
-  0x3fd8b639UL, 0xe5e70470UL, 0xbd205ae1UL, 0x776dc800UL, 0x3fd85855UL,
-  0x3333778aUL, 0x3d2fd56fUL, 0x3bd81800UL, 0x3fd7fafaUL, 0xc812566aUL,
-  0xbd272090UL, 0x687cf800UL, 0x3fd79e26UL, 0x2efd1778UL, 0x3d29ec7dUL,
-  0x76c67800UL, 0x3fd741d8UL, 0x49dc60b3UL, 0x3d2d8b09UL, 0xe6af1800UL,
-  0x3fd6e60eUL, 0x7c222d87UL, 0x3d172165UL, 0x3e9c6800UL, 0x3fd68ac8UL,
-  0x2756eba0UL, 0x3d20a0d3UL, 0x0b3ab000UL, 0x3fd63003UL, 0xe731ae00UL,
-  0xbd2db623UL, 0xdf596000UL, 0x3fd5d5bdUL, 0x08a465dcUL, 0xbd0a0b2aUL,
-  0x53c8d000UL, 0x3fd57bf7UL, 0xee5d40efUL, 0x3d1fadedUL, 0x0738a000UL,
-  0x3fd522aeUL, 0x8164c759UL, 0x3d2ebe70UL, 0x9e173000UL, 0x3fd4c9e0UL,
-  0x1b0ad8a4UL, 0xbd2e2089UL, 0xc271c800UL, 0x3fd4718dUL, 0x0967d675UL,
-  0xbd2f27ceUL, 0x23d5e800UL, 0x3fd419b4UL, 0xec90e09dUL, 0x3d08e436UL,
-  0x77333000UL, 0x3fd3c252UL, 0xb606bd5cUL, 0x3d183b54UL, 0x76be1000UL,
-  0x3fd36b67UL, 0xb0f177c8UL, 0x3d116ecdUL, 0xe1d36000UL, 0x3fd314f1UL,
-  0xd3213cb8UL, 0xbd28e27aUL, 0x7cdc9000UL, 0x3fd2bef0UL, 0x4a5004f4UL,
-  0x3d2a9cfaUL, 0x1134d800UL, 0x3fd26962UL, 0xdf5bb3b6UL, 0x3d2c93c1UL,
-  0x6d0eb800UL, 0x3fd21445UL, 0xba46baeaUL, 0x3d0a87deUL, 0x635a6800UL,
-  0x3fd1bf99UL, 0x5147bdb7UL, 0x3d2ca6edUL, 0xcbacf800UL, 0x3fd16b5cUL,
-  0xf7a51681UL, 0x3d2b9acdUL, 0x8227e800UL, 0x3fd1178eUL, 0x63a5f01cUL,
-  0xbd2c210eUL, 0x67616000UL, 0x3fd0c42dUL, 0x163ceae9UL, 0x3d27188bUL,
-  0x604d5800UL, 0x3fd07138UL, 0x16ed4e91UL, 0x3cf89cdbUL, 0x5626c800UL,
-  0x3fd01eaeUL, 0x1485e94aUL, 0xbd16f08cUL, 0x6cb3b000UL, 0x3fcf991cUL,
-  0xca0cdf30UL, 0x3d1bcbecUL, 0xe4dd0000UL, 0x3fcef5adUL, 0x65bb8e11UL,
-  0xbcca2115UL, 0xffe71000UL, 0x3fce530eUL, 0x6041f430UL, 0x3cc21227UL,
-  0xb0d49000UL, 0x3fcdb13dUL, 0xf715b035UL, 0xbd2aff2aUL, 0xf2656000UL,
-  0x3fcd1037UL, 0x75b6f6e4UL, 0xbd084a7eUL, 0xc6f01000UL, 0x3fcc6ffbUL,
-  0xc5962bd2UL, 0xbcf1ec72UL, 0x383be000UL, 0x3fcbd087UL, 0x595412b6UL,
-  0xbd2d4bc4UL, 0x575bd000UL, 0x3fcb31d8UL, 0x4eace1aaUL, 0xbd0c358dUL,
-  0x3c8ae000UL, 0x3fca93edUL, 0x50562169UL, 0xbd287243UL, 0x07089000UL,
-  0x3fc9f6c4UL, 0x6865817aUL, 0x3d29904dUL, 0xdcf70000UL, 0x3fc95a5aUL,
-  0x58a0ff6fUL, 0x3d07f228UL, 0xeb390000UL, 0x3fc8beafUL, 0xaae92cd1UL,
-  0xbd073d54UL, 0x6551a000UL, 0x3fc823c1UL, 0x9a631e83UL, 0x3d1e0ddbUL,
-  0x85445000UL, 0x3fc7898dUL, 0x70914305UL, 0xbd1c6610UL, 0x8b757000UL,
-  0x3fc6f012UL, 0xe59c21e1UL, 0xbd25118dUL, 0xbe8c1000UL, 0x3fc6574eUL,
-  0x2c3c2e78UL, 0x3d19cf8bUL, 0x6b544000UL, 0x3fc5bf40UL, 0xeb68981cUL,
-  0xbd127023UL, 0xe4a1b000UL, 0x3fc527e5UL, 0xe5697dc7UL, 0x3d2633e8UL,
-  0x8333b000UL, 0x3fc4913dUL, 0x54fdb678UL, 0x3d258379UL, 0xa5993000UL,
-  0x3fc3fb45UL, 0x7e6a354dUL, 0xbd2cd1d8UL, 0xb0159000UL, 0x3fc365fcUL,
-  0x234b7289UL, 0x3cc62fa8UL, 0x0c868000UL, 0x3fc2d161UL, 0xcb81b4a1UL,
-  0x3d039d6cUL, 0x2a49c000UL, 0x3fc23d71UL, 0x8fd3df5cUL, 0x3d100d23UL,
-  0x7e23f000UL, 0x3fc1aa2bUL, 0x44389934UL, 0x3d2ca78eUL, 0x8227e000UL,
-  0x3fc1178eUL, 0xce2d07f2UL, 0x3d21ef78UL, 0xb59e4000UL, 0x3fc08598UL,
-  0x7009902cUL, 0xbd27e5ddUL, 0x39dbe000UL, 0x3fbfe891UL, 0x4fa10afdUL,
-  0xbd2534d6UL, 0x830a2000UL, 0x3fbec739UL, 0xafe645e0UL, 0xbd2dc068UL,
-  0x63844000UL, 0x3fbda727UL, 0x1fa71733UL, 0x3d1a8940UL, 0x01bc4000UL,
-  0x3fbc8858UL, 0xc65aacd3UL, 0x3d2646d1UL, 0x8dad6000UL, 0x3fbb6ac8UL,
-  0x2bf768e5UL, 0xbd139080UL, 0x40b1c000UL, 0x3fba4e76UL, 0xb94407c8UL,
-  0xbd0e42b6UL, 0x5d594000UL, 0x3fb9335eUL, 0x3abd47daUL, 0x3d23115cUL,
-  0x2f40e000UL, 0x3fb8197eUL, 0xf96ffdf7UL, 0x3d0f80dcUL, 0x0aeac000UL,
-  0x3fb700d3UL, 0xa99ded32UL, 0x3cec1e8dUL, 0x4d97a000UL, 0x3fb5e95aUL,
-  0x3c5d1d1eUL, 0xbd2c6906UL, 0x5d208000UL, 0x3fb4d311UL, 0x82f4e1efUL,
-  0xbcf53a25UL, 0xa7d1e000UL, 0x3fb3bdf5UL, 0xa5db4ed7UL, 0x3d2cc85eUL,
-  0xa4472000UL, 0x3fb2aa04UL, 0xae9c697dUL, 0xbd20b6e8UL, 0xd1466000UL,
-  0x3fb1973bUL, 0x560d9e9bUL, 0xbd25325dUL, 0xb59e4000UL, 0x3fb08598UL,
-  0x7009902cUL, 0xbd17e5ddUL, 0xc006c000UL, 0x3faeea31UL, 0x4fc93b7bUL,
-  0xbd0e113eUL, 0xcdddc000UL, 0x3faccb73UL, 0x47d82807UL, 0xbd1a68f2UL,
-  0xd0fb0000UL, 0x3faaaef2UL, 0x353bb42eUL, 0x3d20fc1aUL, 0x149fc000UL,
-  0x3fa894aaUL, 0xd05a267dUL, 0xbd197995UL, 0xf2d4c000UL, 0x3fa67c94UL,
-  0xec19afa2UL, 0xbd029efbUL, 0xd42e0000UL, 0x3fa466aeUL, 0x75bdfd28UL,
-  0xbd2c1673UL, 0x2f8d0000UL, 0x3fa252f3UL, 0xe021b67bUL, 0x3d283e9aUL,
-  0x89e74000UL, 0x3fa0415dUL, 0x5cf1d753UL, 0x3d0111c0UL, 0xec148000UL,
-  0x3f9c63d2UL, 0x3f9eb2f3UL, 0x3d2578c6UL, 0x28c90000UL, 0x3f984925UL,
-  0x325a0c34UL, 0xbd2aa0baUL, 0x25980000UL, 0x3f9432a9UL, 0x928637feUL,
-  0x3d098139UL, 0x58938000UL, 0x3f902056UL, 0x06e2f7d2UL, 0xbd23dc5bUL,
-  0xa3890000UL, 0x3f882448UL, 0xda74f640UL, 0xbd275577UL, 0x75890000UL,
-  0x3f801015UL, 0x999d2be8UL, 0xbd10c76bUL, 0x59580000UL, 0x3f700805UL,
-  0xcb31c67bUL, 0x3d2166afUL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
-  0x80000000UL, 0xfefa3800UL, 0x3fa62e42UL, 0x93c76730UL, 0x3ceef357UL,
-  0x92492492UL, 0x3fc24924UL, 0x00000000UL, 0xbfd00000UL, 0x3d6fb175UL,
-  0xbfc5555eUL, 0x55555555UL, 0x3fd55555UL, 0x9999999aUL, 0x3fc99999UL,
-  0x00000000UL, 0xbfe00000UL, 0x00000000UL, 0xffffe000UL, 0x00000000UL,
-  0xffffe000UL
-};
-//registers,
-// input: xmm0
-// scratch: xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7
-//          rax, rdx, rcx, rbx (tmp)
-
-void MacroAssembler::fast_log(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ecx, Register edx, Register tmp) {
-  Label L_2TAG_PACKET_0_0_2, L_2TAG_PACKET_1_0_2, L_2TAG_PACKET_2_0_2, L_2TAG_PACKET_3_0_2;
-  Label L_2TAG_PACKET_4_0_2, L_2TAG_PACKET_5_0_2, L_2TAG_PACKET_6_0_2, L_2TAG_PACKET_7_0_2;
-  Label L_2TAG_PACKET_8_0_2, L_2TAG_PACKET_9_0_2;
-  Label L_2TAG_PACKET_10_0_2, start;
-
-  assert_different_registers(tmp, eax, ecx, edx);
-  jmp(start);
-  address static_const_table = (address)_static_const_table_log;
-
-  bind(start);
-  subl(rsp, 104);
-  movl(Address(rsp, 40), tmp);
-  lea(tmp, ExternalAddress(static_const_table));
-  xorpd(xmm2, xmm2);
-  movl(eax, 16368);
-  pinsrw(xmm2, eax, 3);
-  xorpd(xmm3, xmm3);
-  movl(edx, 30704);
-  pinsrw(xmm3, edx, 3);
-  movsd(xmm0, Address(rsp, 112));
-  movapd(xmm1, xmm0);
-  movl(ecx, 32768);
-  movdl(xmm4, ecx);
-  movsd(xmm5, Address(tmp, 2128));         // 0x00000000UL, 0xffffe000UL
-  pextrw(eax, xmm0, 3);
-  por(xmm0, xmm2);
-  psllq(xmm0, 5);
-  movl(ecx, 16352);
-  psrlq(xmm0, 34);
-  rcpss(xmm0, xmm0);
-  psllq(xmm1, 12);
-  pshufd(xmm6, xmm5, 228);
-  psrlq(xmm1, 12);
-  subl(eax, 16);
-  cmpl(eax, 32736);
-  jcc(Assembler::aboveEqual, L_2TAG_PACKET_0_0_2);
-
-  bind(L_2TAG_PACKET_1_0_2);
-  paddd(xmm0, xmm4);
-  por(xmm1, xmm3);
-  movdl(edx, xmm0);
-  psllq(xmm0, 29);
-  pand(xmm5, xmm1);
-  pand(xmm0, xmm6);
-  subsd(xmm1, xmm5);
-  mulpd(xmm5, xmm0);
-  andl(eax, 32752);
-  subl(eax, ecx);
-  cvtsi2sdl(xmm7, eax);
-  mulsd(xmm1, xmm0);
-  movsd(xmm6, Address(tmp, 2064));         // 0xfefa3800UL, 0x3fa62e42UL
-  movdqu(xmm3, Address(tmp, 2080));        // 0x92492492UL, 0x3fc24924UL, 0x00000000UL, 0xbfd00000UL
-  subsd(xmm5, xmm2);
-  andl(edx, 16711680);
-  shrl(edx, 12);
-  movdqu(xmm0, Address(tmp, edx));
-  movdqu(xmm4, Address(tmp, 2096));        // 0x3d6fb175UL, 0xbfc5555eUL, 0x55555555UL, 0x3fd55555UL
-  addsd(xmm1, xmm5);
-  movdqu(xmm2, Address(tmp, 2112));        // 0x9999999aUL, 0x3fc99999UL, 0x00000000UL, 0xbfe00000UL
-  mulsd(xmm6, xmm7);
-  pshufd(xmm5, xmm1, 68);
-  mulsd(xmm7, Address(tmp, 2072));         // 0x93c76730UL, 0x3ceef357UL, 0x92492492UL, 0x3fc24924UL
-  mulsd(xmm3, xmm1);
-  addsd(xmm0, xmm6);
-  mulpd(xmm4, xmm5);
-  mulpd(xmm5, xmm5);
-  pshufd(xmm6, xmm0, 228);
-  addsd(xmm0, xmm1);
-  addpd(xmm4, xmm2);
-  mulpd(xmm3, xmm5);
-  subsd(xmm6, xmm0);
-  mulsd(xmm4, xmm1);
-  pshufd(xmm2, xmm0, 238);
-  addsd(xmm1, xmm6);
-  mulsd(xmm5, xmm5);
-  addsd(xmm7, xmm2);
-  addpd(xmm4, xmm3);
-  addsd(xmm1, xmm7);
-  mulpd(xmm4, xmm5);
-  addsd(xmm1, xmm4);
-  pshufd(xmm5, xmm4, 238);
-  addsd(xmm1, xmm5);
-  addsd(xmm0, xmm1);
-  jmp(L_2TAG_PACKET_2_0_2);
-
-  bind(L_2TAG_PACKET_0_0_2);
-  movsd(xmm0, Address(rsp, 112));
-  movdqu(xmm1, xmm0);
-  addl(eax, 16);
-  cmpl(eax, 32768);
-  jcc(Assembler::aboveEqual, L_2TAG_PACKET_3_0_2);
-  cmpl(eax, 16);
-  jcc(Assembler::below, L_2TAG_PACKET_4_0_2);
-
-  bind(L_2TAG_PACKET_5_0_2);
-  addsd(xmm0, xmm0);
-  jmp(L_2TAG_PACKET_2_0_2);
-
-  bind(L_2TAG_PACKET_6_0_2);
-  jcc(Assembler::above, L_2TAG_PACKET_5_0_2);
-  cmpl(edx, 0);
-  jcc(Assembler::above, L_2TAG_PACKET_5_0_2);
-  jmp(L_2TAG_PACKET_7_0_2);
-
-  bind(L_2TAG_PACKET_3_0_2);
-  movdl(edx, xmm1);
-  psrlq(xmm1, 32);
-  movdl(ecx, xmm1);
-  addl(ecx, ecx);
-  cmpl(ecx, -2097152);
-  jcc(Assembler::aboveEqual, L_2TAG_PACKET_6_0_2);
-  orl(edx, ecx);
-  cmpl(edx, 0);
-  jcc(Assembler::equal, L_2TAG_PACKET_8_0_2);
-
-  bind(L_2TAG_PACKET_7_0_2);
-  xorpd(xmm1, xmm1);
-  xorpd(xmm0, xmm0);
-  movl(eax, 32752);
-  pinsrw(xmm1, eax, 3);
-  movl(edx, 3);
-  mulsd(xmm0, xmm1);
-
-  bind(L_2TAG_PACKET_9_0_2);
-  movsd(Address(rsp, 0), xmm0);
-  movsd(xmm0, Address(rsp, 112));
-  fld_d(Address(rsp, 0));
-  jmp(L_2TAG_PACKET_10_0_2);
-
-  bind(L_2TAG_PACKET_8_0_2);
-  xorpd(xmm1, xmm1);
-  xorpd(xmm0, xmm0);
-  movl(eax, 49136);
-  pinsrw(xmm0, eax, 3);
-  divsd(xmm0, xmm1);
-  movl(edx, 2);
-  jmp(L_2TAG_PACKET_9_0_2);
-
-  bind(L_2TAG_PACKET_4_0_2);
-  movdl(edx, xmm1);
-  psrlq(xmm1, 32);
-  movdl(ecx, xmm1);
-  orl(edx, ecx);
-  cmpl(edx, 0);
-  jcc(Assembler::equal, L_2TAG_PACKET_8_0_2);
-  xorpd(xmm1, xmm1);
-  movl(eax, 18416);
-  pinsrw(xmm1, eax, 3);
-  mulsd(xmm0, xmm1);
-  movapd(xmm1, xmm0);
-  pextrw(eax, xmm0, 3);
-  por(xmm0, xmm2);
-  psllq(xmm0, 5);
-  movl(ecx, 18416);
-  psrlq(xmm0, 34);
-  rcpss(xmm0, xmm0);
-  psllq(xmm1, 12);
-  pshufd(xmm6, xmm5, 228);
-  psrlq(xmm1, 12);
-  jmp(L_2TAG_PACKET_1_0_2);
-
-  bind(L_2TAG_PACKET_2_0_2);
-  movsd(Address(rsp, 24), xmm0);
-  fld_d(Address(rsp, 24));
-
-  bind(L_2TAG_PACKET_10_0_2);
-  movl(tmp, Address(rsp, 40));
-}
-
-#endif // !_LP64
-
-/******************************************************************************/
-//                     ALGORITHM DESCRIPTION  - POW()
-//                     ---------------------
-//
-//    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) = NaN.
-//  pow(+1,y) = NaN 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.
-//
-/******************************************************************************/
-
-#ifdef _LP64
-ALIGNED_(16) juint _HIGHSIGMASK[] =
-{
-  0x00000000UL, 0xfffff800UL, 0x00000000UL, 0xfffff800UL
-};
-
-ALIGNED_(16) juint _LOG2_E[] =
-{
-  0x00000000UL, 0x3ff72000UL, 0x161bb241UL, 0xbf5dabe1UL
-};
-
-ALIGNED_(16) juint _HIGHMASK_Y[] =
-{
-  0x00000000UL, 0xfffffff8UL, 0x00000000UL, 0xffffffffUL
-};
-
-ALIGNED_(16) juint _T_exp[] =
-{
-  0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0x3b700000UL, 0xfa5abcbfUL,
-  0x3ff00b1aUL, 0xa7609f71UL, 0xbc84f6b2UL, 0xa9fb3335UL, 0x3ff0163dUL,
-  0x9ab8cdb7UL, 0x3c9b6129UL, 0x143b0281UL, 0x3ff02168UL, 0x0fc54eb6UL,
-  0xbc82bf31UL, 0x3e778061UL, 0x3ff02c9aUL, 0x535b085dUL, 0xbc719083UL,
-  0x2e11bbccUL, 0x3ff037d4UL, 0xeeade11aUL, 0x3c656811UL, 0xe86e7f85UL,
-  0x3ff04315UL, 0x1977c96eUL, 0xbc90a31cUL, 0x72f654b1UL, 0x3ff04e5fUL,
-  0x3aa0d08cUL, 0x3c84c379UL, 0xd3158574UL, 0x3ff059b0UL, 0xa475b465UL,
-  0x3c8d73e2UL, 0x0e3c1f89UL, 0x3ff0650aUL, 0x5799c397UL, 0xbc95cb7bUL,
-  0x29ddf6deUL, 0x3ff0706bUL, 0xe2b13c27UL, 0xbc8c91dfUL, 0x2b72a836UL,
-  0x3ff07bd4UL, 0x54458700UL, 0x3c832334UL, 0x18759bc8UL, 0x3ff08745UL,
-  0x4bb284ffUL, 0x3c6186beUL, 0xf66607e0UL, 0x3ff092bdUL, 0x800a3fd1UL,
-  0xbc968063UL, 0xcac6f383UL, 0x3ff09e3eUL, 0x18316136UL, 0x3c914878UL,
-  0x9b1f3919UL, 0x3ff0a9c7UL, 0x873d1d38UL, 0x3c85d16cUL, 0x6cf9890fUL,
-  0x3ff0b558UL, 0x4adc610bUL, 0x3c98a62eUL, 0x45e46c85UL, 0x3ff0c0f1UL,
-  0x06d21cefUL, 0x3c94f989UL, 0x2b7247f7UL, 0x3ff0cc92UL, 0x16e24f71UL,
-  0x3c901edcUL, 0x23395decUL, 0x3ff0d83bUL, 0xe43f316aUL, 0xbc9bc14dUL,
-  0x32d3d1a2UL, 0x3ff0e3ecUL, 0x27c57b52UL, 0x3c403a17UL, 0x5fdfa9c5UL,
-  0x3ff0efa5UL, 0xbc54021bUL, 0xbc949db9UL, 0xaffed31bUL, 0x3ff0fb66UL,
-  0xc44ebd7bUL, 0xbc6b9bedUL, 0x28d7233eUL, 0x3ff10730UL, 0x1692fdd5UL,
-  0x3c8d46ebUL, 0xd0125b51UL, 0x3ff11301UL, 0x39449b3aUL, 0xbc96c510UL,
-  0xab5e2ab6UL, 0x3ff11edbUL, 0xf703fb72UL, 0xbc9ca454UL, 0xc06c31ccUL,
-  0x3ff12abdUL, 0xb36ca5c7UL, 0xbc51b514UL, 0x14f204abUL, 0x3ff136a8UL,
-  0xba48dcf0UL, 0xbc67108fUL, 0xaea92de0UL, 0x3ff1429aUL, 0x9af1369eUL,
-  0xbc932fbfUL, 0x934f312eUL, 0x3ff14e95UL, 0x39bf44abUL, 0xbc8b91e8UL,
-  0xc8a58e51UL, 0x3ff15a98UL, 0xb9eeab0aUL, 0x3c82406aUL, 0x5471c3c2UL,
-  0x3ff166a4UL, 0x82ea1a32UL, 0x3c58f23bUL, 0x3c7d517bUL, 0x3ff172b8UL,
-  0xb9d78a76UL, 0xbc819041UL, 0x8695bbc0UL, 0x3ff17ed4UL, 0xe2ac5a64UL,
-  0x3c709e3fUL, 0x388c8deaUL, 0x3ff18af9UL, 0xd1970f6cUL, 0xbc911023UL,
-  0x58375d2fUL, 0x3ff19726UL, 0x85f17e08UL, 0x3c94aaddUL, 0xeb6fcb75UL,
-  0x3ff1a35bUL, 0x7b4968e4UL, 0x3c8e5b4cUL, 0xf8138a1cUL, 0x3ff1af99UL,
-  0xa4b69280UL, 0x3c97bf85UL, 0x84045cd4UL, 0x3ff1bbe0UL, 0x352ef607UL,
-  0xbc995386UL, 0x95281c6bUL, 0x3ff1c82fUL, 0x8010f8c9UL, 0x3c900977UL,
-  0x3168b9aaUL, 0x3ff1d487UL, 0x00a2643cUL, 0x3c9e016eUL, 0x5eb44027UL,
-  0x3ff1e0e7UL, 0x088cb6deUL, 0xbc96fdd8UL, 0x22fcd91dUL, 0x3ff1ed50UL,
-  0x027bb78cUL, 0xbc91df98UL, 0x8438ce4dUL, 0x3ff1f9c1UL, 0xa097af5cUL,
-  0xbc9bf524UL, 0x88628cd6UL, 0x3ff2063bUL, 0x814a8495UL, 0x3c8dc775UL,
-  0x3578a819UL, 0x3ff212beUL, 0x2cfcaac9UL, 0x3c93592dUL, 0x917ddc96UL,
-  0x3ff21f49UL, 0x9494a5eeUL, 0x3c82a97eUL, 0xa27912d1UL, 0x3ff22bddUL,
-  0x5577d69fUL, 0x3c8d34fbUL, 0x6e756238UL, 0x3ff2387aUL, 0xb6c70573UL,
-  0x3c99b07eUL, 0xfb82140aUL, 0x3ff2451fUL, 0x911ca996UL, 0x3c8acfccUL,
-  0x4fb2a63fUL, 0x3ff251ceUL, 0xbef4f4a4UL, 0x3c8ac155UL, 0x711ece75UL,
-  0x3ff25e85UL, 0x4ac31b2cUL, 0x3c93e1a2UL, 0x65e27cddUL, 0x3ff26b45UL,
-  0x9940e9d9UL, 0x3c82bd33UL, 0x341ddf29UL, 0x3ff2780eUL, 0x05f9e76cUL,
-  0x3c9e067cUL, 0xe1f56381UL, 0x3ff284dfUL, 0x8c3f0d7eUL, 0xbc9a4c3aUL,
-  0x7591bb70UL, 0x3ff291baUL, 0x28401cbdUL, 0xbc82cc72UL, 0xf51fdee1UL,
-  0x3ff29e9dUL, 0xafad1255UL, 0x3c8612e8UL, 0x66d10f13UL, 0x3ff2ab8aUL,
-  0x191690a7UL, 0xbc995743UL, 0xd0dad990UL, 0x3ff2b87fUL, 0xd6381aa4UL,
-  0xbc410adcUL, 0x39771b2fUL, 0x3ff2c57eUL, 0xa6eb5124UL, 0xbc950145UL,
-  0xa6e4030bUL, 0x3ff2d285UL, 0x54db41d5UL, 0x3c900247UL, 0x1f641589UL,
-  0x3ff2df96UL, 0xfbbce198UL, 0x3c9d16cfUL, 0xa93e2f56UL, 0x3ff2ecafUL,
-  0x45d52383UL, 0x3c71ca0fUL, 0x4abd886bUL, 0x3ff2f9d2UL, 0x532bda93UL,
-  0xbc653c55UL, 0x0a31b715UL, 0x3ff306feUL, 0xd23182e4UL, 0x3c86f46aUL,
-  0xedeeb2fdUL, 0x3ff31432UL, 0xf3f3fcd1UL, 0x3c8959a3UL, 0xfc4cd831UL,
-  0x3ff32170UL, 0x8e18047cUL, 0x3c8a9ce7UL, 0x3ba8ea32UL, 0x3ff32eb8UL,
-  0x3cb4f318UL, 0xbc9c45e8UL, 0xb26416ffUL, 0x3ff33c08UL, 0x843659a6UL,
-  0x3c932721UL, 0x66e3fa2dUL, 0x3ff34962UL, 0x930881a4UL, 0xbc835a75UL,
-  0x5f929ff1UL, 0x3ff356c5UL, 0x5c4e4628UL, 0xbc8b5ceeUL, 0xa2de883bUL,
-  0x3ff36431UL, 0xa06cb85eUL, 0xbc8c3144UL, 0x373aa9cbUL, 0x3ff371a7UL,
-  0xbf42eae2UL, 0xbc963aeaUL, 0x231e754aUL, 0x3ff37f26UL, 0x9eceb23cUL,
-  0xbc99f5caUL, 0x6d05d866UL, 0x3ff38caeUL, 0x3c9904bdUL, 0xbc9e958dUL,
-  0x1b7140efUL, 0x3ff39a40UL, 0xfc8e2934UL, 0xbc99a9a5UL, 0x34e59ff7UL,
-  0x3ff3a7dbUL, 0xd661f5e3UL, 0xbc75e436UL, 0xbfec6cf4UL, 0x3ff3b57fUL,
-  0xe26fff18UL, 0x3c954c66UL, 0xc313a8e5UL, 0x3ff3c32dUL, 0x375d29c3UL,
-  0xbc9efff8UL, 0x44ede173UL, 0x3ff3d0e5UL, 0x8c284c71UL, 0x3c7fe8d0UL,
-  0x4c123422UL, 0x3ff3dea6UL, 0x11f09ebcUL, 0x3c8ada09UL, 0xdf1c5175UL,
-  0x3ff3ec70UL, 0x7b8c9bcaUL, 0xbc8af663UL, 0x04ac801cUL, 0x3ff3fa45UL,
-  0xf956f9f3UL, 0xbc97d023UL, 0xc367a024UL, 0x3ff40822UL, 0xb6f4d048UL,
-  0x3c8bddf8UL, 0x21f72e2aUL, 0x3ff4160aUL, 0x1c309278UL, 0xbc5ef369UL,
-  0x2709468aUL, 0x3ff423fbUL, 0xc0b314ddUL, 0xbc98462dUL, 0xd950a897UL,
-  0x3ff431f5UL, 0xe35f7999UL, 0xbc81c7ddUL, 0x3f84b9d4UL, 0x3ff43ffaUL,
-  0x9704c003UL, 0x3c8880beUL, 0x6061892dUL, 0x3ff44e08UL, 0x04ef80d0UL,
-  0x3c489b7aUL, 0x42a7d232UL, 0x3ff45c20UL, 0x82fb1f8eUL, 0xbc686419UL,
-  0xed1d0057UL, 0x3ff46a41UL, 0xd1648a76UL, 0x3c9c944bUL, 0x668b3237UL,
-  0x3ff4786dUL, 0xed445733UL, 0xbc9c20f0UL, 0xb5c13cd0UL, 0x3ff486a2UL,
-  0xb69062f0UL, 0x3c73c1a3UL, 0xe192aed2UL, 0x3ff494e1UL, 0x5e499ea0UL,
-  0xbc83b289UL, 0xf0d7d3deUL, 0x3ff4a32aUL, 0xf3d1be56UL, 0x3c99cb62UL,
-  0xea6db7d7UL, 0x3ff4b17dUL, 0x7f2897f0UL, 0xbc8125b8UL, 0xd5362a27UL,
-  0x3ff4bfdaUL, 0xafec42e2UL, 0x3c7d4397UL, 0xb817c114UL, 0x3ff4ce41UL,
-  0x690abd5dUL, 0x3c905e29UL, 0x99fddd0dUL, 0x3ff4dcb2UL, 0xbc6a7833UL,
-  0x3c98ecdbUL, 0x81d8abffUL, 0x3ff4eb2dUL, 0x2e5d7a52UL, 0xbc95257dUL,
-  0x769d2ca7UL, 0x3ff4f9b2UL, 0xd25957e3UL, 0xbc94b309UL, 0x7f4531eeUL,
-  0x3ff50841UL, 0x49b7465fUL, 0x3c7a249bUL, 0xa2cf6642UL, 0x3ff516daUL,
-  0x69bd93efUL, 0xbc8f7685UL, 0xe83f4eefUL, 0x3ff5257dUL, 0x43efef71UL,
-  0xbc7c998dUL, 0x569d4f82UL, 0x3ff5342bUL, 0x1db13cadUL, 0xbc807abeUL,
-  0xf4f6ad27UL, 0x3ff542e2UL, 0x192d5f7eUL, 0x3c87926dUL, 0xca5d920fUL,
-  0x3ff551a4UL, 0xefede59bUL, 0xbc8d689cUL, 0xdde910d2UL, 0x3ff56070UL,
-  0x168eebf0UL, 0xbc90fb6eUL, 0x36b527daUL, 0x3ff56f47UL, 0x011d93adUL,
-  0x3c99bb2cUL, 0xdbe2c4cfUL, 0x3ff57e27UL, 0x8a57b9c4UL, 0xbc90b98cUL,
-  0xd497c7fdUL, 0x3ff58d12UL, 0x5b9a1de8UL, 0x3c8295e1UL, 0x27ff07ccUL,
-  0x3ff59c08UL, 0xe467e60fUL, 0xbc97e2ceUL, 0xdd485429UL, 0x3ff5ab07UL,
-  0x054647adUL, 0x3c96324cUL, 0xfba87a03UL, 0x3ff5ba11UL, 0x4c233e1aUL,
-  0xbc9b77a1UL, 0x8a5946b7UL, 0x3ff5c926UL, 0x816986a2UL, 0x3c3c4b1bUL,
-  0x90998b93UL, 0x3ff5d845UL, 0xa8b45643UL, 0xbc9cd6a7UL, 0x15ad2148UL,
-  0x3ff5e76fUL, 0x3080e65eUL, 0x3c9ba6f9UL, 0x20dceb71UL, 0x3ff5f6a3UL,
-  0xe3cdcf92UL, 0xbc89eaddUL, 0xb976dc09UL, 0x3ff605e1UL, 0x9b56de47UL,
-  0xbc93e242UL, 0xe6cdf6f4UL, 0x3ff6152aUL, 0x4ab84c27UL, 0x3c9e4b3eUL,
-  0xb03a5585UL, 0x3ff6247eUL, 0x7e40b497UL, 0xbc9383c1UL, 0x1d1929fdUL,
-  0x3ff633ddUL, 0xbeb964e5UL, 0x3c984710UL, 0x34ccc320UL, 0x3ff64346UL,
-  0x759d8933UL, 0xbc8c483cUL, 0xfebc8fb7UL, 0x3ff652b9UL, 0xc9a73e09UL,
-  0xbc9ae3d5UL, 0x82552225UL, 0x3ff66238UL, 0x87591c34UL, 0xbc9bb609UL,
-  0xc70833f6UL, 0x3ff671c1UL, 0x586c6134UL, 0xbc8e8732UL, 0xd44ca973UL,
-  0x3ff68155UL, 0x44f73e65UL, 0x3c6038aeUL, 0xb19e9538UL, 0x3ff690f4UL,
-  0x9aeb445dUL, 0x3c8804bdUL, 0x667f3bcdUL, 0x3ff6a09eUL, 0x13b26456UL,
-  0xbc9bdd34UL, 0xfa75173eUL, 0x3ff6b052UL, 0x2c9a9d0eUL, 0x3c7a38f5UL,
-  0x750bdabfUL, 0x3ff6c012UL, 0x67ff0b0dUL, 0xbc728956UL, 0xddd47645UL,
-  0x3ff6cfdcUL, 0xb6f17309UL, 0x3c9c7aa9UL, 0x3c651a2fUL, 0x3ff6dfb2UL,
-  0x683c88abUL, 0xbc6bbe3aUL, 0x98593ae5UL, 0x3ff6ef92UL, 0x9e1ac8b2UL,
-  0xbc90b974UL, 0xf9519484UL, 0x3ff6ff7dUL, 0x25860ef6UL, 0xbc883c0fUL,
-  0x66f42e87UL, 0x3ff70f74UL, 0xd45aa65fUL, 0x3c59d644UL, 0xe8ec5f74UL,
-  0x3ff71f75UL, 0x86887a99UL, 0xbc816e47UL, 0x86ead08aUL, 0x3ff72f82UL,
-  0x2cd62c72UL, 0xbc920aa0UL, 0x48a58174UL, 0x3ff73f9aUL, 0x6c65d53cUL,
-  0xbc90a8d9UL, 0x35d7cbfdUL, 0x3ff74fbdUL, 0x618a6e1cUL, 0x3c9047fdUL,
-  0x564267c9UL, 0x3ff75febUL, 0x57316dd3UL, 0xbc902459UL, 0xb1ab6e09UL,
-  0x3ff77024UL, 0x169147f8UL, 0x3c9b7877UL, 0x4fde5d3fUL, 0x3ff78069UL,
-  0x0a02162dUL, 0x3c9866b8UL, 0x38ac1cf6UL, 0x3ff790b9UL, 0x62aadd3eUL,
-  0x3c9349a8UL, 0x73eb0187UL, 0x3ff7a114UL, 0xee04992fUL, 0xbc841577UL,
-  0x0976cfdbUL, 0x3ff7b17bUL, 0x8468dc88UL, 0xbc9bebb5UL, 0x0130c132UL,
-  0x3ff7c1edUL, 0xd1164dd6UL, 0x3c9f124cUL, 0x62ff86f0UL, 0x3ff7d26aUL,
-  0xfb72b8b4UL, 0x3c91bddbUL, 0x36cf4e62UL, 0x3ff7e2f3UL, 0xba15797eUL,
-  0x3c705d02UL, 0x8491c491UL, 0x3ff7f387UL, 0xcf9311aeUL, 0xbc807f11UL,
-  0x543e1a12UL, 0x3ff80427UL, 0x626d972bUL, 0xbc927c86UL, 0xadd106d9UL,
-  0x3ff814d2UL, 0x0d151d4dUL, 0x3c946437UL, 0x994cce13UL, 0x3ff82589UL,
-  0xd41532d8UL, 0xbc9d4c1dUL, 0x1eb941f7UL, 0x3ff8364cUL, 0x31df2bd5UL,
-  0x3c999b9aUL, 0x4623c7adUL, 0x3ff8471aUL, 0xa341cdfbUL, 0xbc88d684UL,
-  0x179f5b21UL, 0x3ff857f4UL, 0xf8b216d0UL, 0xbc5ba748UL, 0x9b4492edUL,
-  0x3ff868d9UL, 0x9bd4f6baUL, 0xbc9fc6f8UL, 0xd931a436UL, 0x3ff879caUL,
-  0xd2db47bdUL, 0x3c85d2d7UL, 0xd98a6699UL, 0x3ff88ac7UL, 0xf37cb53aUL,
-  0x3c9994c2UL, 0xa478580fUL, 0x3ff89bd0UL, 0x4475202aUL, 0x3c9d5395UL,
-  0x422aa0dbUL, 0x3ff8ace5UL, 0x56864b27UL, 0x3c96e9f1UL, 0xbad61778UL,
-  0x3ff8be05UL, 0xfc43446eUL, 0x3c9ecb5eUL, 0x16b5448cUL, 0x3ff8cf32UL,
-  0x32e9e3aaUL, 0xbc70d55eUL, 0x5e0866d9UL, 0x3ff8e06aUL, 0x6fc9b2e6UL,
-  0xbc97114aUL, 0x99157736UL, 0x3ff8f1aeUL, 0xa2e3976cUL, 0x3c85cc13UL,
-  0xd0282c8aUL, 0x3ff902feUL, 0x85fe3fd2UL, 0x3c9592caUL, 0x0b91ffc6UL,
-  0x3ff9145bUL, 0x2e582524UL, 0xbc9dd679UL, 0x53aa2fe2UL, 0x3ff925c3UL,
-  0xa639db7fUL, 0xbc83455fUL, 0xb0cdc5e5UL, 0x3ff93737UL, 0x81b57ebcUL,
-  0xbc675fc7UL, 0x2b5f98e5UL, 0x3ff948b8UL, 0x797d2d99UL, 0xbc8dc3d6UL,
-  0xcbc8520fUL, 0x3ff95a44UL, 0x96a5f039UL, 0xbc764b7cUL, 0x9a7670b3UL,
-  0x3ff96bddUL, 0x7f19c896UL, 0xbc5ba596UL, 0x9fde4e50UL, 0x3ff97d82UL,
-  0x7c1b85d1UL, 0xbc9d185bUL, 0xe47a22a2UL, 0x3ff98f33UL, 0xa24c78ecUL,
-  0x3c7cabdaUL, 0x70ca07baUL, 0x3ff9a0f1UL, 0x91cee632UL, 0xbc9173bdUL,
-  0x4d53fe0dUL, 0x3ff9b2bbUL, 0x4df6d518UL, 0xbc9dd84eUL, 0x82a3f090UL,
-  0x3ff9c491UL, 0xb071f2beUL, 0x3c7c7c46UL, 0x194bb8d5UL, 0x3ff9d674UL,
-  0xa3dd8233UL, 0xbc9516beUL, 0x19e32323UL, 0x3ff9e863UL, 0x78e64c6eUL,
-  0x3c7824caUL, 0x8d07f29eUL, 0x3ff9fa5eUL, 0xaaf1faceUL, 0xbc84a9ceUL,
-  0x7b5de565UL, 0x3ffa0c66UL, 0x5d1cd533UL, 0xbc935949UL, 0xed8eb8bbUL,
-  0x3ffa1e7aUL, 0xee8be70eUL, 0x3c9c6618UL, 0xec4a2d33UL, 0x3ffa309bUL,
-  0x7ddc36abUL, 0x3c96305cUL, 0x80460ad8UL, 0x3ffa42c9UL, 0x589fb120UL,
-  0xbc9aa780UL, 0xb23e255dUL, 0x3ffa5503UL, 0xdb8d41e1UL, 0xbc9d2f6eUL,
-  0x8af46052UL, 0x3ffa674aUL, 0x30670366UL, 0x3c650f56UL, 0x1330b358UL,
-  0x3ffa799eUL, 0xcac563c7UL, 0x3c9bcb7eUL, 0x53c12e59UL, 0x3ffa8bfeUL,
-  0xb2ba15a9UL, 0xbc94f867UL, 0x5579fdbfUL, 0x3ffa9e6bUL, 0x0ef7fd31UL,
-  0x3c90fac9UL, 0x21356ebaUL, 0x3ffab0e5UL, 0xdae94545UL, 0x3c889c31UL,
-  0xbfd3f37aUL, 0x3ffac36bUL, 0xcae76cd0UL, 0xbc8f9234UL, 0x3a3c2774UL,
-  0x3ffad5ffUL, 0xb6b1b8e5UL, 0x3c97ef3bUL, 0x995ad3adUL, 0x3ffae89fUL,
-  0x345dcc81UL, 0x3c97a1cdUL, 0xe622f2ffUL, 0x3ffafb4cUL, 0x0f315ecdUL,
-  0xbc94b2fcUL, 0x298db666UL, 0x3ffb0e07UL, 0x4c80e425UL, 0xbc9bdef5UL,
-  0x6c9a8952UL, 0x3ffb20ceUL, 0x4a0756ccUL, 0x3c94dd02UL, 0xb84f15fbUL,
-  0x3ffb33a2UL, 0x3084d708UL, 0xbc62805eUL, 0x15b749b1UL, 0x3ffb4684UL,
-  0xe9df7c90UL, 0xbc7f763dUL, 0x8de5593aUL, 0x3ffb5972UL, 0xbbba6de3UL,
-  0xbc9c71dfUL, 0x29f1c52aUL, 0x3ffb6c6eUL, 0x52883f6eUL, 0x3c92a8f3UL,
-  0xf2fb5e47UL, 0x3ffb7f76UL, 0x7e54ac3bUL, 0xbc75584fUL, 0xf22749e4UL,
-  0x3ffb928cUL, 0x54cb65c6UL, 0xbc9b7216UL, 0x30a1064aUL, 0x3ffba5b0UL,
-  0x0e54292eUL, 0xbc9efcd3UL, 0xb79a6f1fUL, 0x3ffbb8e0UL, 0xc9696205UL,
-  0xbc3f52d1UL, 0x904bc1d2UL, 0x3ffbcc1eUL, 0x7a2d9e84UL, 0x3c823dd0UL,
-  0xc3f3a207UL, 0x3ffbdf69UL, 0x60ea5b53UL, 0xbc3c2623UL, 0x5bd71e09UL,
-  0x3ffbf2c2UL, 0x3f6b9c73UL, 0xbc9efdcaUL, 0x6141b33dUL, 0x3ffc0628UL,
-  0xa1fbca34UL, 0xbc8d8a5aUL, 0xdd85529cUL, 0x3ffc199bUL, 0x895048ddUL,
-  0x3c811065UL, 0xd9fa652cUL, 0x3ffc2d1cUL, 0x17c8a5d7UL, 0xbc96e516UL,
-  0x5fffd07aUL, 0x3ffc40abUL, 0xe083c60aUL, 0x3c9b4537UL, 0x78fafb22UL,
-  0x3ffc5447UL, 0x2493b5afUL, 0x3c912f07UL, 0x2e57d14bUL, 0x3ffc67f1UL,
-  0xff483cadUL, 0x3c92884dUL, 0x8988c933UL, 0x3ffc7ba8UL, 0xbe255559UL,
-  0xbc8e76bbUL, 0x9406e7b5UL, 0x3ffc8f6dUL, 0x48805c44UL, 0x3c71acbcUL,
-  0x5751c4dbUL, 0x3ffca340UL, 0xd10d08f5UL, 0xbc87f2beUL, 0xdcef9069UL,
-  0x3ffcb720UL, 0xd1e949dbUL, 0x3c7503cbUL, 0x2e6d1675UL, 0x3ffccb0fUL,
-  0x86009092UL, 0xbc7d220fUL, 0x555dc3faUL, 0x3ffcdf0bUL, 0x53829d72UL,
-  0xbc8dd83bUL, 0x5b5bab74UL, 0x3ffcf315UL, 0xb86dff57UL, 0xbc9a08e9UL,
-  0x4a07897cUL, 0x3ffd072dUL, 0x43797a9cUL, 0xbc9cbc37UL, 0x2b08c968UL,
-  0x3ffd1b53UL, 0x219a36eeUL, 0x3c955636UL, 0x080d89f2UL, 0x3ffd2f87UL,
-  0x719d8578UL, 0xbc9d487bUL, 0xeacaa1d6UL, 0x3ffd43c8UL, 0xbf5a1614UL,
-  0x3c93db53UL, 0xdcfba487UL, 0x3ffd5818UL, 0xd75b3707UL, 0x3c82ed02UL,
-  0xe862e6d3UL, 0x3ffd6c76UL, 0x4a8165a0UL, 0x3c5fe87aUL, 0x16c98398UL,
-  0x3ffd80e3UL, 0x8beddfe8UL, 0xbc911ec1UL, 0x71ff6075UL, 0x3ffd955dUL,
-  0xbb9af6beUL, 0x3c9a052dUL, 0x03db3285UL, 0x3ffda9e6UL, 0x696db532UL,
-  0x3c9c2300UL, 0xd63a8315UL, 0x3ffdbe7cUL, 0x926b8be4UL, 0xbc9b76f1UL,
-  0xf301b460UL, 0x3ffdd321UL, 0x78f018c3UL, 0x3c92da57UL, 0x641c0658UL,
-  0x3ffde7d5UL, 0x8e79ba8fUL, 0xbc9ca552UL, 0x337b9b5fUL, 0x3ffdfc97UL,
-  0x4f184b5cUL, 0xbc91a5cdUL, 0x6b197d17UL, 0x3ffe1167UL, 0xbd5c7f44UL,
-  0xbc72b529UL, 0x14f5a129UL, 0x3ffe2646UL, 0x817a1496UL, 0xbc97b627UL,
-  0x3b16ee12UL, 0x3ffe3b33UL, 0x31fdc68bUL, 0xbc99f4a4UL, 0xe78b3ff6UL,
-  0x3ffe502eUL, 0x80a9cc8fUL, 0x3c839e89UL, 0x24676d76UL, 0x3ffe6539UL,
-  0x7522b735UL, 0xbc863ff8UL, 0xfbc74c83UL, 0x3ffe7a51UL, 0xca0c8de2UL,
-  0x3c92d522UL, 0x77cdb740UL, 0x3ffe8f79UL, 0x80b054b1UL, 0xbc910894UL,
-  0xa2a490daUL, 0x3ffea4afUL, 0x179c2893UL, 0xbc9e9c23UL, 0x867cca6eUL,
-  0x3ffeb9f4UL, 0x2293e4f2UL, 0x3c94832fUL, 0x2d8e67f1UL, 0x3ffecf48UL,
-  0xb411ad8cUL, 0xbc9c93f3UL, 0xa2188510UL, 0x3ffee4aaUL, 0xa487568dUL,
-  0x3c91c68dUL, 0xee615a27UL, 0x3ffefa1bUL, 0x86a4b6b0UL, 0x3c9dc7f4UL,
-  0x1cb6412aUL, 0x3fff0f9cUL, 0x65181d45UL, 0xbc932200UL, 0x376bba97UL,
-  0x3fff252bUL, 0xbf0d8e43UL, 0x3c93a1a5UL, 0x48dd7274UL, 0x3fff3ac9UL,
-  0x3ed837deUL, 0xbc795a5aUL, 0x5b6e4540UL, 0x3fff5076UL, 0x2dd8a18bUL,
-  0x3c99d3e1UL, 0x798844f8UL, 0x3fff6632UL, 0x3539343eUL, 0x3c9fa37bUL,
-  0xad9cbe14UL, 0x3fff7bfdUL, 0xd006350aUL, 0xbc9dbb12UL, 0x02243c89UL,
-  0x3fff91d8UL, 0xa779f689UL, 0xbc612ea8UL, 0x819e90d8UL, 0x3fffa7c1UL,
-  0xf3a5931eUL, 0x3c874853UL, 0x3692d514UL, 0x3fffbdbaUL, 0x15098eb6UL,
-  0xbc796773UL, 0x2b8f71f1UL, 0x3fffd3c2UL, 0x966579e7UL, 0x3c62eb74UL,
-  0x6b2a23d9UL, 0x3fffe9d9UL, 0x7442fde3UL, 0x3c74a603UL
-};
-
-ALIGNED_(16) juint _e_coeff[] =
-{
-  0xe78a6731UL, 0x3f55d87fUL, 0xd704a0c0UL, 0x3fac6b08UL, 0x6fba4e77UL,
-  0x3f83b2abUL, 0xff82c58fUL, 0x3fcebfbdUL, 0xfefa39efUL, 0x3fe62e42UL,
-  0x00000000UL, 0x00000000UL
-};
-
-ALIGNED_(16) juint _coeff_h[] =
-{
-  0x00000000UL, 0xbfd61a00UL, 0x00000000UL, 0xbf5dabe1UL
-};
-
-ALIGNED_(16) juint _HIGHMASK_LOG_X[] =
-{
-  0xf8000000UL, 0xffffffffUL, 0x00000000UL, 0xfffff800UL
-};
-
-ALIGNED_(8) juint _HALFMASK[] =
-{
-  0xf8000000UL, 0xffffffffUL, 0xf8000000UL, 0xffffffffUL
-};
-
-ALIGNED_(16) juint _coeff_pow[] =
-{
-  0x6dc96112UL, 0xbf836578UL, 0xee241472UL, 0xbf9b0301UL, 0x9f95985aUL,
-  0xbfb528dbUL, 0xb3841d2aUL, 0xbfd619b6UL, 0x518775e3UL, 0x3f9004f2UL,
-  0xac8349bbUL, 0x3fa76c9bUL, 0x486ececcUL, 0x3fc4635eUL, 0x161bb241UL,
-  0xbf5dabe1UL, 0x9f95985aUL, 0xbfb528dbUL, 0xf8b5787dUL, 0x3ef2531eUL,
-  0x486ececbUL, 0x3fc4635eUL, 0x412055ccUL, 0xbdd61bb2UL
-};
-
-ALIGNED_(16) juint _L_tbl_pow[] =
-{
-  0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0x00000000UL, 0x20000000UL,
-  0x3feff00aUL, 0x96621f95UL, 0x3e5b1856UL, 0xe0000000UL, 0x3fefe019UL,
-  0xe5916f9eUL, 0xbe325278UL, 0x00000000UL, 0x3fefd02fUL, 0x859a1062UL,
-  0x3e595fb7UL, 0xc0000000UL, 0x3fefc049UL, 0xb245f18fUL, 0xbe529c38UL,
-  0xe0000000UL, 0x3fefb069UL, 0xad2880a7UL, 0xbe501230UL, 0x60000000UL,
-  0x3fefa08fUL, 0xc8e72420UL, 0x3e597bd1UL, 0x80000000UL, 0x3fef90baUL,
-  0xc30c4500UL, 0xbe5d6c75UL, 0xe0000000UL, 0x3fef80eaUL, 0x02c63f43UL,
-  0x3e2e1318UL, 0xc0000000UL, 0x3fef7120UL, 0xb3d4ccccUL, 0xbe44c52aUL,
-  0x00000000UL, 0x3fef615cUL, 0xdbd91397UL, 0xbe4e7d6cUL, 0xa0000000UL,
-  0x3fef519cUL, 0x65c5cd68UL, 0xbe522dc8UL, 0xa0000000UL, 0x3fef41e2UL,
-  0x46d1306cUL, 0xbe5a840eUL, 0xe0000000UL, 0x3fef322dUL, 0xd2980e94UL,
-  0x3e5071afUL, 0xa0000000UL, 0x3fef227eUL, 0x773abadeUL, 0xbe5891e5UL,
-  0xa0000000UL, 0x3fef12d4UL, 0xdc6bf46bUL, 0xbe5cccbeUL, 0xe0000000UL,
-  0x3fef032fUL, 0xbc7247faUL, 0xbe2bab83UL, 0x80000000UL, 0x3feef390UL,
-  0xbcaa1e46UL, 0xbe53bb3bUL, 0x60000000UL, 0x3feee3f6UL, 0x5f6c682dUL,
-  0xbe54c619UL, 0x80000000UL, 0x3feed461UL, 0x5141e368UL, 0xbe4b6d86UL,
-  0xe0000000UL, 0x3feec4d1UL, 0xec678f76UL, 0xbe369af6UL, 0x80000000UL,
-  0x3feeb547UL, 0x41301f55UL, 0xbe2d4312UL, 0x60000000UL, 0x3feea5c2UL,
-  0x676da6bdUL, 0xbe4d8dd0UL, 0x60000000UL, 0x3fee9642UL, 0x57a891c4UL,
-  0x3e51f991UL, 0xa0000000UL, 0x3fee86c7UL, 0xe4eb491eUL, 0x3e579bf9UL,
-  0x20000000UL, 0x3fee7752UL, 0xfddc4a2cUL, 0xbe3356e6UL, 0xc0000000UL,
-  0x3fee67e1UL, 0xd75b5bf1UL, 0xbe449531UL, 0x80000000UL, 0x3fee5876UL,
-  0xbd423b8eUL, 0x3df54fe4UL, 0x60000000UL, 0x3fee4910UL, 0x330e51b9UL,
-  0x3e54289cUL, 0x80000000UL, 0x3fee39afUL, 0x8651a95fUL, 0xbe55aad6UL,
-  0xa0000000UL, 0x3fee2a53UL, 0x5e98c708UL, 0xbe2fc4a9UL, 0xe0000000UL,
-  0x3fee1afcUL, 0x0989328dUL, 0x3e23958cUL, 0x40000000UL, 0x3fee0babUL,
-  0xee642abdUL, 0xbe425dd8UL, 0xa0000000UL, 0x3fedfc5eUL, 0xc394d236UL,
-  0x3e526362UL, 0x20000000UL, 0x3feded17UL, 0xe104aa8eUL, 0x3e4ce247UL,
-  0xc0000000UL, 0x3fedddd4UL, 0x265a9be4UL, 0xbe5bb77aUL, 0x40000000UL,
-  0x3fedce97UL, 0x0ecac52fUL, 0x3e4a7cb1UL, 0xe0000000UL, 0x3fedbf5eUL,
-  0x124cb3b8UL, 0x3e257024UL, 0x80000000UL, 0x3fedb02bUL, 0xe6d4febeUL,
-  0xbe2033eeUL, 0x20000000UL, 0x3feda0fdUL, 0x39cca00eUL, 0xbe3ddabcUL,
-  0xc0000000UL, 0x3fed91d3UL, 0xef8a552aUL, 0xbe543390UL, 0x40000000UL,
-  0x3fed82afUL, 0xb8e85204UL, 0x3e513850UL, 0xe0000000UL, 0x3fed738fUL,
-  0x3d59fe08UL, 0xbe5db728UL, 0x40000000UL, 0x3fed6475UL, 0x3aa7ead1UL,
-  0x3e58804bUL, 0xc0000000UL, 0x3fed555fUL, 0xf8a35ba9UL, 0xbe5298b0UL,
-  0x00000000UL, 0x3fed464fUL, 0x9a88dd15UL, 0x3e5a8cdbUL, 0x40000000UL,
-  0x3fed3743UL, 0xb0b0a190UL, 0x3e598635UL, 0x80000000UL, 0x3fed283cUL,
-  0xe2113295UL, 0xbe5c1119UL, 0x80000000UL, 0x3fed193aUL, 0xafbf1728UL,
-  0xbe492e9cUL, 0x60000000UL, 0x3fed0a3dUL, 0xe4a4ccf3UL, 0x3e19b90eUL,
-  0x20000000UL, 0x3fecfb45UL, 0xba3cbeb8UL, 0x3e406b50UL, 0xc0000000UL,
-  0x3fecec51UL, 0x110f7dddUL, 0x3e0d6806UL, 0x40000000UL, 0x3fecdd63UL,
-  0x7dd7d508UL, 0xbe5a8943UL, 0x80000000UL, 0x3fecce79UL, 0x9b60f271UL,
-  0xbe50676aUL, 0x80000000UL, 0x3fecbf94UL, 0x0b9ad660UL, 0x3e59174fUL,
-  0x60000000UL, 0x3fecb0b4UL, 0x00823d9cUL, 0x3e5bbf72UL, 0x20000000UL,
-  0x3feca1d9UL, 0x38a6ec89UL, 0xbe4d38f9UL, 0x80000000UL, 0x3fec9302UL,
-  0x3a0b7d8eUL, 0x3e53dbfdUL, 0xc0000000UL, 0x3fec8430UL, 0xc6826b34UL,
-  0xbe27c5c9UL, 0xc0000000UL, 0x3fec7563UL, 0x0c706381UL, 0xbe593653UL,
-  0x60000000UL, 0x3fec669bUL, 0x7df34ec7UL, 0x3e461ab5UL, 0xe0000000UL,
-  0x3fec57d7UL, 0x40e5e7e8UL, 0xbe5c3daeUL, 0x00000000UL, 0x3fec4919UL,
-  0x5602770fUL, 0xbe55219dUL, 0xc0000000UL, 0x3fec3a5eUL, 0xec7911ebUL,
-  0x3e5a5d25UL, 0x60000000UL, 0x3fec2ba9UL, 0xb39ea225UL, 0xbe53c00bUL,
-  0x80000000UL, 0x3fec1cf8UL, 0x967a212eUL, 0x3e5a8ddfUL, 0x60000000UL,
-  0x3fec0e4cUL, 0x580798bdUL, 0x3e5f53abUL, 0x00000000UL, 0x3febffa5UL,
-  0xb8282df6UL, 0xbe46b874UL, 0x20000000UL, 0x3febf102UL, 0xe33a6729UL,
-  0x3e54963fUL, 0x00000000UL, 0x3febe264UL, 0x3b53e88aUL, 0xbe3adce1UL,
-  0x60000000UL, 0x3febd3caUL, 0xc2585084UL, 0x3e5cde9fUL, 0x80000000UL,
-  0x3febc535UL, 0xa335c5eeUL, 0xbe39fd9cUL, 0x20000000UL, 0x3febb6a5UL,
-  0x7325b04dUL, 0x3e42ba15UL, 0x60000000UL, 0x3feba819UL, 0x1564540fUL,
-  0x3e3a9f35UL, 0x40000000UL, 0x3feb9992UL, 0x83fff592UL, 0xbe5465ceUL,
-  0xa0000000UL, 0x3feb8b0fUL, 0xb9da63d3UL, 0xbe4b1a0aUL, 0x80000000UL,
-  0x3feb7c91UL, 0x6d6f1ea4UL, 0x3e557657UL, 0x00000000UL, 0x3feb6e18UL,
-  0x5e80a1bfUL, 0x3e4ddbb6UL, 0x00000000UL, 0x3feb5fa3UL, 0x1c9eacb5UL,
-  0x3e592877UL, 0xa0000000UL, 0x3feb5132UL, 0x6d40beb3UL, 0xbe51858cUL,
-  0xa0000000UL, 0x3feb42c6UL, 0xd740c67bUL, 0x3e427ad2UL, 0x40000000UL,
-  0x3feb345fUL, 0xa3e0cceeUL, 0xbe5c2fc4UL, 0x40000000UL, 0x3feb25fcUL,
-  0x8e752b50UL, 0xbe3da3c2UL, 0xc0000000UL, 0x3feb179dUL, 0xa892e7deUL,
-  0x3e1fb481UL, 0xc0000000UL, 0x3feb0943UL, 0x21ed71e9UL, 0xbe365206UL,
-  0x20000000UL, 0x3feafaeeUL, 0x0e1380a3UL, 0x3e5c5b7bUL, 0x20000000UL,
-  0x3feaec9dUL, 0x3c3d640eUL, 0xbe5dbbd0UL, 0x60000000UL, 0x3feade50UL,
-  0x8f97a715UL, 0x3e3a8ec5UL, 0x20000000UL, 0x3fead008UL, 0x23ab2839UL,
-  0x3e2fe98aUL, 0x40000000UL, 0x3feac1c4UL, 0xf4bbd50fUL, 0x3e54d8f6UL,
-  0xe0000000UL, 0x3feab384UL, 0x14757c4dUL, 0xbe48774cUL, 0xc0000000UL,
-  0x3feaa549UL, 0x7c7b0eeaUL, 0x3e5b51bbUL, 0x20000000UL, 0x3fea9713UL,
-  0xf56f7013UL, 0x3e386200UL, 0xe0000000UL, 0x3fea88e0UL, 0xbe428ebeUL,
-  0xbe514af5UL, 0xe0000000UL, 0x3fea7ab2UL, 0x8d0e4496UL, 0x3e4f9165UL,
-  0x60000000UL, 0x3fea6c89UL, 0xdbacc5d5UL, 0xbe5c063bUL, 0x20000000UL,
-  0x3fea5e64UL, 0x3f19d970UL, 0xbe5a0c8cUL, 0x20000000UL, 0x3fea5043UL,
-  0x09ea3e6bUL, 0x3e5065dcUL, 0x80000000UL, 0x3fea4226UL, 0x78df246cUL,
-  0x3e5e05f6UL, 0x40000000UL, 0x3fea340eUL, 0x4057d4a0UL, 0x3e431b2bUL,
-  0x40000000UL, 0x3fea25faUL, 0x82867bb5UL, 0x3e4b76beUL, 0xa0000000UL,
-  0x3fea17eaUL, 0x9436f40aUL, 0xbe5aad39UL, 0x20000000UL, 0x3fea09dfUL,
-  0x4b5253b3UL, 0x3e46380bUL, 0x00000000UL, 0x3fe9fbd8UL, 0x8fc52466UL,
-  0xbe386f9bUL, 0x20000000UL, 0x3fe9edd5UL, 0x22d3f344UL, 0xbe538347UL,
-  0x60000000UL, 0x3fe9dfd6UL, 0x1ac33522UL, 0x3e5dbc53UL, 0x00000000UL,
-  0x3fe9d1dcUL, 0xeabdff1dUL, 0x3e40fc0cUL, 0xe0000000UL, 0x3fe9c3e5UL,
-  0xafd30e73UL, 0xbe585e63UL, 0xe0000000UL, 0x3fe9b5f3UL, 0xa52f226aUL,
-  0xbe43e8f9UL, 0x20000000UL, 0x3fe9a806UL, 0xecb8698dUL, 0xbe515b36UL,
-  0x80000000UL, 0x3fe99a1cUL, 0xf2b4e89dUL, 0x3e48b62bUL, 0x20000000UL,
-  0x3fe98c37UL, 0x7c9a88fbUL, 0x3e44414cUL, 0x00000000UL, 0x3fe97e56UL,
-  0xda015741UL, 0xbe5d13baUL, 0xe0000000UL, 0x3fe97078UL, 0x5fdace06UL,
-  0x3e51b947UL, 0x00000000UL, 0x3fe962a0UL, 0x956ca094UL, 0x3e518785UL,
-  0x40000000UL, 0x3fe954cbUL, 0x01164c1dUL, 0x3e5d5b57UL, 0xc0000000UL,
-  0x3fe946faUL, 0xe63b3767UL, 0xbe4f84e7UL, 0x40000000UL, 0x3fe9392eUL,
-  0xe57cc2a9UL, 0x3e34eda3UL, 0xe0000000UL, 0x3fe92b65UL, 0x8c75b544UL,
-  0x3e5766a0UL, 0xc0000000UL, 0x3fe91da1UL, 0x37d1d087UL, 0xbe5e2ab1UL,
-  0x80000000UL, 0x3fe90fe1UL, 0xa953dc20UL, 0x3e5fa1f3UL, 0x80000000UL,
-  0x3fe90225UL, 0xdbd3f369UL, 0x3e47d6dbUL, 0xa0000000UL, 0x3fe8f46dUL,
-  0x1c9be989UL, 0xbe5e2b0aUL, 0xa0000000UL, 0x3fe8e6b9UL, 0x3c93d76aUL,
-  0x3e5c8618UL, 0xe0000000UL, 0x3fe8d909UL, 0x2182fc9aUL, 0xbe41aa9eUL,
-  0x20000000UL, 0x3fe8cb5eUL, 0xe6b3539dUL, 0xbe530d19UL, 0x60000000UL,
-  0x3fe8bdb6UL, 0x49e58cc3UL, 0xbe3bb374UL, 0xa0000000UL, 0x3fe8b012UL,
-  0xa7cfeb8fUL, 0x3e56c412UL, 0x00000000UL, 0x3fe8a273UL, 0x8d52bc19UL,
-  0x3e1429b8UL, 0x60000000UL, 0x3fe894d7UL, 0x4dc32c6cUL, 0xbe48604cUL,
-  0xc0000000UL, 0x3fe8873fUL, 0x0c868e56UL, 0xbe564ee5UL, 0x00000000UL,
-  0x3fe879acUL, 0x56aee828UL, 0x3e5e2fd8UL, 0x60000000UL, 0x3fe86c1cUL,
-  0x7ceab8ecUL, 0x3e493365UL, 0xc0000000UL, 0x3fe85e90UL, 0x78d4dadcUL,
-  0xbe4f7f25UL, 0x00000000UL, 0x3fe85109UL, 0x0ccd8280UL, 0x3e31e7a2UL,
-  0x40000000UL, 0x3fe84385UL, 0x34ba4e15UL, 0x3e328077UL, 0x80000000UL,
-  0x3fe83605UL, 0xa670975aUL, 0xbe53eee5UL, 0xa0000000UL, 0x3fe82889UL,
-  0xf61b77b2UL, 0xbe43a20aUL, 0xa0000000UL, 0x3fe81b11UL, 0x13e6643bUL,
-  0x3e5e5fe5UL, 0xc0000000UL, 0x3fe80d9dUL, 0x82cc94e8UL, 0xbe5ff1f9UL,
-  0xa0000000UL, 0x3fe8002dUL, 0x8a0c9c5dUL, 0xbe42b0e7UL, 0x60000000UL,
-  0x3fe7f2c1UL, 0x22a16f01UL, 0x3e5d9ea0UL, 0x20000000UL, 0x3fe7e559UL,
-  0xc38cd451UL, 0x3e506963UL, 0xc0000000UL, 0x3fe7d7f4UL, 0x9902bc71UL,
-  0x3e4503d7UL, 0x40000000UL, 0x3fe7ca94UL, 0xdef2a3c0UL, 0x3e3d98edUL,
-  0xa0000000UL, 0x3fe7bd37UL, 0xed49abb0UL, 0x3e24c1ffUL, 0xe0000000UL,
-  0x3fe7afdeUL, 0xe3b0be70UL, 0xbe40c467UL, 0x00000000UL, 0x3fe7a28aUL,
-  0xaf9f193cUL, 0xbe5dff6cUL, 0xe0000000UL, 0x3fe79538UL, 0xb74cf6b6UL,
-  0xbe258ed0UL, 0xa0000000UL, 0x3fe787ebUL, 0x1d9127c7UL, 0x3e345fb0UL,
-  0x40000000UL, 0x3fe77aa2UL, 0x1028c21dUL, 0xbe4619bdUL, 0xa0000000UL,
-  0x3fe76d5cUL, 0x7cb0b5e4UL, 0x3e40f1a2UL, 0xe0000000UL, 0x3fe7601aUL,
-  0x2b1bc4adUL, 0xbe32e8bbUL, 0xe0000000UL, 0x3fe752dcUL, 0x6839f64eUL,
-  0x3e41f57bUL, 0xc0000000UL, 0x3fe745a2UL, 0xc4121f7eUL, 0xbe52c40aUL,
-  0x60000000UL, 0x3fe7386cUL, 0xd6852d72UL, 0xbe5c4e6bUL, 0xc0000000UL,
-  0x3fe72b39UL, 0x91d690f7UL, 0xbe57f88fUL, 0xe0000000UL, 0x3fe71e0aUL,
-  0x627a2159UL, 0xbe4425d5UL, 0xc0000000UL, 0x3fe710dfUL, 0x50a54033UL,
-  0x3e422b7eUL, 0x60000000UL, 0x3fe703b8UL, 0x3b0b5f91UL, 0x3e5d3857UL,
-  0xe0000000UL, 0x3fe6f694UL, 0x84d628a2UL, 0xbe51f090UL, 0x00000000UL,
-  0x3fe6e975UL, 0x306d8894UL, 0xbe414d83UL, 0xe0000000UL, 0x3fe6dc58UL,
-  0x30bf24aaUL, 0xbe4650caUL, 0x80000000UL, 0x3fe6cf40UL, 0xd4628d69UL,
-  0xbe5db007UL, 0xc0000000UL, 0x3fe6c22bUL, 0xa2aae57bUL, 0xbe31d279UL,
-  0xc0000000UL, 0x3fe6b51aUL, 0x860edf7eUL, 0xbe2d4c4aUL, 0x80000000UL,
-  0x3fe6a80dUL, 0xf3559341UL, 0xbe5f7e98UL, 0xe0000000UL, 0x3fe69b03UL,
-  0xa885899eUL, 0xbe5c2011UL, 0xe0000000UL, 0x3fe68dfdUL, 0x2bdc6d37UL,
-  0x3e224a82UL, 0xa0000000UL, 0x3fe680fbUL, 0xc12ad1b9UL, 0xbe40cf56UL,
-  0x00000000UL, 0x3fe673fdUL, 0x1bcdf659UL, 0xbdf52f2dUL, 0x00000000UL,
-  0x3fe66702UL, 0x5df10408UL, 0x3e5663e0UL, 0xc0000000UL, 0x3fe65a0aUL,
-  0xa4070568UL, 0xbe40b12fUL, 0x00000000UL, 0x3fe64d17UL, 0x71c54c47UL,
-  0x3e5f5e8bUL, 0x00000000UL, 0x3fe64027UL, 0xbd4b7e83UL, 0x3e42ead6UL,
-  0xa0000000UL, 0x3fe6333aUL, 0x61598bd2UL, 0xbe4c48d4UL, 0xc0000000UL,
-  0x3fe62651UL, 0x6f538d61UL, 0x3e548401UL, 0xa0000000UL, 0x3fe6196cUL,
-  0x14344120UL, 0xbe529af6UL, 0x00000000UL, 0x3fe60c8bUL, 0x5982c587UL,
-  0xbe3e1e4fUL, 0x00000000UL, 0x3fe5ffadUL, 0xfe51d4eaUL, 0xbe4c897aUL,
-  0x80000000UL, 0x3fe5f2d2UL, 0xfd46ebe1UL, 0x3e552e00UL, 0xa0000000UL,
-  0x3fe5e5fbUL, 0xa4695699UL, 0x3e5ed471UL, 0x60000000UL, 0x3fe5d928UL,
-  0x80d118aeUL, 0x3e456b61UL, 0xa0000000UL, 0x3fe5cc58UL, 0x304c330bUL,
-  0x3e54dc29UL, 0x80000000UL, 0x3fe5bf8cUL, 0x0af2dedfUL, 0xbe3aa9bdUL,
-  0xe0000000UL, 0x3fe5b2c3UL, 0x15fc9258UL, 0xbe479a37UL, 0xc0000000UL,
-  0x3fe5a5feUL, 0x9292c7eaUL, 0x3e188650UL, 0x20000000UL, 0x3fe5993dUL,
-  0x33b4d380UL, 0x3e5d6d93UL, 0x20000000UL, 0x3fe58c7fUL, 0x02fd16c7UL,
-  0x3e2fe961UL, 0xa0000000UL, 0x3fe57fc4UL, 0x4a05edb6UL, 0xbe4d55b4UL,
-  0xa0000000UL, 0x3fe5730dUL, 0x3d443abbUL, 0xbe5e6954UL, 0x00000000UL,
-  0x3fe5665aUL, 0x024acfeaUL, 0x3e50e61bUL, 0x00000000UL, 0x3fe559aaUL,
-  0xcc9edd09UL, 0xbe325403UL, 0x60000000UL, 0x3fe54cfdUL, 0x1fe26950UL,
-  0x3e5d500eUL, 0x60000000UL, 0x3fe54054UL, 0x6c5ae164UL, 0xbe4a79b4UL,
-  0xc0000000UL, 0x3fe533aeUL, 0x154b0287UL, 0xbe401571UL, 0xa0000000UL,
-  0x3fe5270cUL, 0x0673f401UL, 0xbe56e56bUL, 0xe0000000UL, 0x3fe51a6dUL,
-  0x751b639cUL, 0x3e235269UL, 0xa0000000UL, 0x3fe50dd2UL, 0x7c7b2bedUL,
-  0x3ddec887UL, 0xc0000000UL, 0x3fe5013aUL, 0xafab4e17UL, 0x3e5e7575UL,
-  0x60000000UL, 0x3fe4f4a6UL, 0x2e308668UL, 0x3e59aed6UL, 0x80000000UL,
-  0x3fe4e815UL, 0xf33e2a76UL, 0xbe51f184UL, 0xe0000000UL, 0x3fe4db87UL,
-  0x839f3e3eUL, 0x3e57db01UL, 0xc0000000UL, 0x3fe4cefdUL, 0xa9eda7bbUL,
-  0x3e535e0fUL, 0x00000000UL, 0x3fe4c277UL, 0x2a8f66a5UL, 0x3e5ce451UL,
-  0xc0000000UL, 0x3fe4b5f3UL, 0x05192456UL, 0xbe4e8518UL, 0xc0000000UL,
-  0x3fe4a973UL, 0x4aa7cd1dUL, 0x3e46784aUL, 0x40000000UL, 0x3fe49cf7UL,
-  0x8e23025eUL, 0xbe5749f2UL, 0x00000000UL, 0x3fe4907eUL, 0x18d30215UL,
-  0x3e360f39UL, 0x20000000UL, 0x3fe48408UL, 0x63dcf2f3UL, 0x3e5e00feUL,
-  0xc0000000UL, 0x3fe47795UL, 0x46182d09UL, 0xbe5173d9UL, 0xa0000000UL,
-  0x3fe46b26UL, 0x8f0e62aaUL, 0xbe48f281UL, 0xe0000000UL, 0x3fe45ebaUL,
-  0x5775c40cUL, 0xbe56aad4UL, 0x60000000UL, 0x3fe45252UL, 0x0fe25f69UL,
-  0x3e48bd71UL, 0x40000000UL, 0x3fe445edUL, 0xe9989ec5UL, 0x3e590d97UL,
-  0x80000000UL, 0x3fe4398bUL, 0xb3d9ffe3UL, 0x3e479dbcUL, 0x20000000UL,
-  0x3fe42d2dUL, 0x388e4d2eUL, 0xbe5eed80UL, 0xe0000000UL, 0x3fe420d1UL,
-  0x6f797c18UL, 0x3e554b4cUL, 0x20000000UL, 0x3fe4147aUL, 0x31048bb4UL,
-  0xbe5b1112UL, 0x80000000UL, 0x3fe40825UL, 0x2efba4f9UL, 0x3e48ebc7UL,
-  0x40000000UL, 0x3fe3fbd4UL, 0x50201119UL, 0x3e40b701UL, 0x40000000UL,
-  0x3fe3ef86UL, 0x0a4db32cUL, 0x3e551de8UL, 0xa0000000UL, 0x3fe3e33bUL,
-  0x0c9c148bUL, 0xbe50c1f6UL, 0x20000000UL, 0x3fe3d6f4UL, 0xc9129447UL,
-  0x3e533fa0UL, 0x00000000UL, 0x3fe3cab0UL, 0xaae5b5a0UL, 0xbe22b68eUL,
-  0x20000000UL, 0x3fe3be6fUL, 0x02305e8aUL, 0xbe54fc08UL, 0x60000000UL,
-  0x3fe3b231UL, 0x7f908258UL, 0x3e57dc05UL, 0x00000000UL, 0x3fe3a5f7UL,
-  0x1a09af78UL, 0x3e08038bUL, 0xe0000000UL, 0x3fe399bfUL, 0x490643c1UL,
-  0xbe5dbe42UL, 0xe0000000UL, 0x3fe38d8bUL, 0x5e8ad724UL, 0xbe3c2b72UL,
-  0x20000000UL, 0x3fe3815bUL, 0xc67196b6UL, 0x3e1713cfUL, 0xa0000000UL,
-  0x3fe3752dUL, 0x6182e429UL, 0xbe3ec14cUL, 0x40000000UL, 0x3fe36903UL,
-  0xab6eb1aeUL, 0x3e5a2cc5UL, 0x40000000UL, 0x3fe35cdcUL, 0xfe5dc064UL,
-  0xbe5c5878UL, 0x40000000UL, 0x3fe350b8UL, 0x0ba6b9e4UL, 0x3e51619bUL,
-  0x80000000UL, 0x3fe34497UL, 0x857761aaUL, 0x3e5fff53UL, 0x00000000UL,
-  0x3fe3387aUL, 0xf872d68cUL, 0x3e484f4dUL, 0xa0000000UL, 0x3fe32c5fUL,
-  0x087e97c2UL, 0x3e52842eUL, 0x80000000UL, 0x3fe32048UL, 0x73d6d0c0UL,
-  0xbe503edfUL, 0x80000000UL, 0x3fe31434UL, 0x0c1456a1UL, 0xbe5f72adUL,
-  0xa0000000UL, 0x3fe30823UL, 0x83a1a4d5UL, 0xbe5e65ccUL, 0xe0000000UL,
-  0x3fe2fc15UL, 0x855a7390UL, 0xbe506438UL, 0x40000000UL, 0x3fe2f00bUL,
-  0xa2898287UL, 0x3e3d22a2UL, 0xe0000000UL, 0x3fe2e403UL, 0x8b56f66fUL,
-  0xbe5aa5fdUL, 0x80000000UL, 0x3fe2d7ffUL, 0x52db119aUL, 0x3e3a2e3dUL,
-  0x60000000UL, 0x3fe2cbfeUL, 0xe2ddd4c0UL, 0xbe586469UL, 0x40000000UL,
-  0x3fe2c000UL, 0x6b01bf10UL, 0x3e352b9dUL, 0x40000000UL, 0x3fe2b405UL,
-  0xb07a1cdfUL, 0x3e5c5cdaUL, 0x80000000UL, 0x3fe2a80dUL, 0xc7b5f868UL,
-  0xbe5668b3UL, 0xc0000000UL, 0x3fe29c18UL, 0x185edf62UL, 0xbe563d66UL,
-  0x00000000UL, 0x3fe29027UL, 0xf729e1ccUL, 0x3e59a9a0UL, 0x80000000UL,
-  0x3fe28438UL, 0x6433c727UL, 0xbe43cc89UL, 0x00000000UL, 0x3fe2784dUL,
-  0x41782631UL, 0xbe30750cUL, 0xa0000000UL, 0x3fe26c64UL, 0x914911b7UL,
-  0xbe58290eUL, 0x40000000UL, 0x3fe2607fUL, 0x3dcc73e1UL, 0xbe4269cdUL,
-  0x00000000UL, 0x3fe2549dUL, 0x2751bf70UL, 0xbe5a6998UL, 0xc0000000UL,
-  0x3fe248bdUL, 0x4248b9fbUL, 0xbe4ddb00UL, 0x80000000UL, 0x3fe23ce1UL,
-  0xf35cf82fUL, 0x3e561b71UL, 0x60000000UL, 0x3fe23108UL, 0x8e481a2dUL,
-  0x3e518fb9UL, 0x60000000UL, 0x3fe22532UL, 0x5ab96edcUL, 0xbe5fafc5UL,
-  0x40000000UL, 0x3fe2195fUL, 0x80943911UL, 0xbe07f819UL, 0x40000000UL,
-  0x3fe20d8fUL, 0x386f2d6cUL, 0xbe54ba8bUL, 0x40000000UL, 0x3fe201c2UL,
-  0xf29664acUL, 0xbe5eb815UL, 0x20000000UL, 0x3fe1f5f8UL, 0x64f03390UL,
-  0x3e5e320cUL, 0x20000000UL, 0x3fe1ea31UL, 0x747ff696UL, 0x3e5ef0a5UL,
-  0x40000000UL, 0x3fe1de6dUL, 0x3e9ceb51UL, 0xbe5f8d27UL, 0x20000000UL,
-  0x3fe1d2acUL, 0x4ae0b55eUL, 0x3e5faa21UL, 0x20000000UL, 0x3fe1c6eeUL,
-  0x28569a5eUL, 0x3e598a4fUL, 0x20000000UL, 0x3fe1bb33UL, 0x54b33e07UL,
-  0x3e46130aUL, 0x20000000UL, 0x3fe1af7bUL, 0x024f1078UL, 0xbe4dbf93UL,
-  0x00000000UL, 0x3fe1a3c6UL, 0xb0783bfaUL, 0x3e419248UL, 0xe0000000UL,
-  0x3fe19813UL, 0x2f02b836UL, 0x3e4e02b7UL, 0xc0000000UL, 0x3fe18c64UL,
-  0x28dec9d4UL, 0x3e09064fUL, 0x80000000UL, 0x3fe180b8UL, 0x45cbf406UL,
-  0x3e5b1f46UL, 0x40000000UL, 0x3fe1750fUL, 0x03d9964cUL, 0x3e5b0a79UL,
-  0x00000000UL, 0x3fe16969UL, 0x8b5b882bUL, 0xbe238086UL, 0xa0000000UL,
-  0x3fe15dc5UL, 0x73bad6f8UL, 0xbdf1fca4UL, 0x20000000UL, 0x3fe15225UL,
-  0x5385769cUL, 0x3e5e8d76UL, 0xa0000000UL, 0x3fe14687UL, 0x1676dc6bUL,
-  0x3e571d08UL, 0x20000000UL, 0x3fe13aedUL, 0xa8c41c7fUL, 0xbe598a25UL,
-  0x60000000UL, 0x3fe12f55UL, 0xc4e1aaf0UL, 0x3e435277UL, 0xa0000000UL,
-  0x3fe123c0UL, 0x403638e1UL, 0xbe21aa7cUL, 0xc0000000UL, 0x3fe1182eUL,
-  0x557a092bUL, 0xbdd0116bUL, 0xc0000000UL, 0x3fe10c9fUL, 0x7d779f66UL,
-  0x3e4a61baUL, 0xc0000000UL, 0x3fe10113UL, 0x2b09c645UL, 0xbe5d586eUL,
-  0x20000000UL, 0x3fe0ea04UL, 0xea2cad46UL, 0x3e5aa97cUL, 0x20000000UL,
-  0x3fe0d300UL, 0x23190e54UL, 0x3e50f1a7UL, 0xa0000000UL, 0x3fe0bc07UL,
-  0x1379a5a6UL, 0xbe51619dUL, 0x60000000UL, 0x3fe0a51aUL, 0x926a3d4aUL,
-  0x3e5cf019UL, 0xa0000000UL, 0x3fe08e38UL, 0xa8c24358UL, 0x3e35241eUL,
-  0x20000000UL, 0x3fe07762UL, 0x24317e7aUL, 0x3e512cfaUL, 0x00000000UL,
-  0x3fe06097UL, 0xfd9cf274UL, 0xbe55bef3UL, 0x00000000UL, 0x3fe049d7UL,
-  0x3689b49dUL, 0xbe36d26dUL, 0x40000000UL, 0x3fe03322UL, 0xf72ef6c4UL,
-  0xbe54cd08UL, 0xa0000000UL, 0x3fe01c78UL, 0x23702d2dUL, 0xbe5900bfUL,
-  0x00000000UL, 0x3fe005daUL, 0x3f59c14cUL, 0x3e57d80bUL, 0x40000000UL,
-  0x3fdfde8dUL, 0xad67766dUL, 0xbe57fad4UL, 0x40000000UL, 0x3fdfb17cUL,
-  0x644f4ae7UL, 0x3e1ee43bUL, 0x40000000UL, 0x3fdf8481UL, 0x903234d2UL,
-  0x3e501a86UL, 0x40000000UL, 0x3fdf579cUL, 0xafe9e509UL, 0xbe267c3eUL,
-  0x00000000UL, 0x3fdf2acdUL, 0xb7dfda0bUL, 0xbe48149bUL, 0x40000000UL,
-  0x3fdefe13UL, 0x3b94305eUL, 0x3e5f4ea7UL, 0x80000000UL, 0x3fded16fUL,
-  0x5d95da61UL, 0xbe55c198UL, 0x00000000UL, 0x3fdea4e1UL, 0x406960c9UL,
-  0xbdd99a19UL, 0x00000000UL, 0x3fde7868UL, 0xd22f3539UL, 0x3e470c78UL,
-  0x80000000UL, 0x3fde4c04UL, 0x83eec535UL, 0xbe3e1232UL, 0x40000000UL,
-  0x3fde1fb6UL, 0x3dfbffcbUL, 0xbe4b7d71UL, 0x40000000UL, 0x3fddf37dUL,
-  0x7e1be4e0UL, 0xbe5b8f8fUL, 0x40000000UL, 0x3fddc759UL, 0x46dae887UL,
-  0xbe350458UL, 0x80000000UL, 0x3fdd9b4aUL, 0xed6ecc49UL, 0xbe5f0045UL,
-  0x80000000UL, 0x3fdd6f50UL, 0x2e9e883cUL, 0x3e2915daUL, 0x80000000UL,
-  0x3fdd436bUL, 0xf0bccb32UL, 0x3e4a68c9UL, 0x80000000UL, 0x3fdd179bUL,
-  0x9bbfc779UL, 0xbe54a26aUL, 0x00000000UL, 0x3fdcebe0UL, 0x7cea33abUL,
-  0x3e43c6b7UL, 0x40000000UL, 0x3fdcc039UL, 0xe740fd06UL, 0x3e5526c2UL,
-  0x40000000UL, 0x3fdc94a7UL, 0x9eadeb1aUL, 0xbe396d8dUL, 0xc0000000UL,
-  0x3fdc6929UL, 0xf0a8f95aUL, 0xbe5c0ab2UL, 0x80000000UL, 0x3fdc3dc0UL,
-  0x6ee2693bUL, 0x3e0992e6UL, 0xc0000000UL, 0x3fdc126bUL, 0x5ac6b581UL,
-  0xbe2834b6UL, 0x40000000UL, 0x3fdbe72bUL, 0x8cc226ffUL, 0x3e3596a6UL,
-  0x00000000UL, 0x3fdbbbffUL, 0xf92a74bbUL, 0x3e3c5813UL, 0x00000000UL,
-  0x3fdb90e7UL, 0x479664c0UL, 0xbe50d644UL, 0x00000000UL, 0x3fdb65e3UL,
-  0x5004975bUL, 0xbe55258fUL, 0x00000000UL, 0x3fdb3af3UL, 0xe4b23194UL,
-  0xbe588407UL, 0xc0000000UL, 0x3fdb1016UL, 0xe65d4d0aUL, 0x3e527c26UL,
-  0x80000000UL, 0x3fdae54eUL, 0x814fddd6UL, 0x3e5962a2UL, 0x40000000UL,
-  0x3fdaba9aUL, 0xe19d0913UL, 0xbe562f4eUL, 0x80000000UL, 0x3fda8ff9UL,
-  0x43cfd006UL, 0xbe4cfdebUL, 0x40000000UL, 0x3fda656cUL, 0x686f0a4eUL,
-  0x3e5e47a8UL, 0xc0000000UL, 0x3fda3af2UL, 0x7200d410UL, 0x3e5e1199UL,
-  0xc0000000UL, 0x3fda108cUL, 0xabd2266eUL, 0x3e5ee4d1UL, 0x40000000UL,
-  0x3fd9e63aUL, 0x396f8f2cUL, 0x3e4dbffbUL, 0x00000000UL, 0x3fd9bbfbUL,
-  0xe32b25ddUL, 0x3e5c3a54UL, 0x40000000UL, 0x3fd991cfUL, 0x431e4035UL,
-  0xbe457925UL, 0x80000000UL, 0x3fd967b6UL, 0x7bed3dd3UL, 0x3e40c61dUL,
-  0x00000000UL, 0x3fd93db1UL, 0xd7449365UL, 0x3e306419UL, 0x80000000UL,
-  0x3fd913beUL, 0x1746e791UL, 0x3e56fcfcUL, 0x40000000UL, 0x3fd8e9dfUL,
-  0xf3a9028bUL, 0xbe5041b9UL, 0xc0000000UL, 0x3fd8c012UL, 0x56840c50UL,
-  0xbe26e20aUL, 0x40000000UL, 0x3fd89659UL, 0x19763102UL, 0xbe51f466UL,
-  0x80000000UL, 0x3fd86cb2UL, 0x7032de7cUL, 0xbe4d298aUL, 0x80000000UL,
-  0x3fd8431eUL, 0xdeb39fabUL, 0xbe4361ebUL, 0x40000000UL, 0x3fd8199dUL,
-  0x5d01cbe0UL, 0xbe5425b3UL, 0x80000000UL, 0x3fd7f02eUL, 0x3ce99aa9UL,
-  0x3e146fa8UL, 0x80000000UL, 0x3fd7c6d2UL, 0xd1a262b9UL, 0xbe5a1a69UL,
-  0xc0000000UL, 0x3fd79d88UL, 0x8606c236UL, 0x3e423a08UL, 0x80000000UL,
-  0x3fd77451UL, 0x8fd1e1b7UL, 0x3e5a6a63UL, 0xc0000000UL, 0x3fd74b2cUL,
-  0xe491456aUL, 0x3e42c1caUL, 0x40000000UL, 0x3fd7221aUL, 0x4499a6d7UL,
-  0x3e36a69aUL, 0x00000000UL, 0x3fd6f91aUL, 0x5237df94UL, 0xbe0f8f02UL,
-  0x00000000UL, 0x3fd6d02cUL, 0xb6482c6eUL, 0xbe5abcf7UL, 0x00000000UL,
-  0x3fd6a750UL, 0x1919fd61UL, 0xbe57ade2UL, 0x00000000UL, 0x3fd67e86UL,
-  0xaa7a994dUL, 0xbe3f3fbdUL, 0x00000000UL, 0x3fd655ceUL, 0x67db014cUL,
-  0x3e33c550UL, 0x00000000UL, 0x3fd62d28UL, 0xa82856b7UL, 0xbe1409d1UL,
-  0xc0000000UL, 0x3fd60493UL, 0x1e6a300dUL, 0x3e55d899UL, 0x80000000UL,
-  0x3fd5dc11UL, 0x1222bd5cUL, 0xbe35bfc0UL, 0xc0000000UL, 0x3fd5b3a0UL,
-  0x6e8dc2d3UL, 0x3e5d4d79UL, 0x00000000UL, 0x3fd58b42UL, 0xe0e4ace6UL,
-  0xbe517303UL, 0x80000000UL, 0x3fd562f4UL, 0xb306e0a8UL, 0x3e5edf0fUL,
-  0xc0000000UL, 0x3fd53ab8UL, 0x6574bc54UL, 0x3e5ee859UL, 0x80000000UL,
-  0x3fd5128eUL, 0xea902207UL, 0x3e5f6188UL, 0xc0000000UL, 0x3fd4ea75UL,
-  0x9f911d79UL, 0x3e511735UL, 0x80000000UL, 0x3fd4c26eUL, 0xf9c77397UL,
-  0xbe5b1643UL, 0x40000000UL, 0x3fd49a78UL, 0x15fc9258UL, 0x3e479a37UL,
-  0x80000000UL, 0x3fd47293UL, 0xd5a04dd9UL, 0xbe426e56UL, 0xc0000000UL,
-  0x3fd44abfUL, 0xe04042f5UL, 0x3e56f7c6UL, 0x40000000UL, 0x3fd422fdUL,
-  0x1d8bf2c8UL, 0x3e5d8810UL, 0x00000000UL, 0x3fd3fb4cUL, 0x88a8ddeeUL,
-  0xbe311454UL, 0xc0000000UL, 0x3fd3d3abUL, 0x3e3b5e47UL, 0xbe5d1b72UL,
-  0x40000000UL, 0x3fd3ac1cUL, 0xc2ab5d59UL, 0x3e31b02bUL, 0xc0000000UL,
-  0x3fd3849dUL, 0xd4e34b9eUL, 0x3e51cb2fUL, 0x40000000UL, 0x3fd35d30UL,
-  0x177204fbUL, 0xbe2b8cd7UL, 0x80000000UL, 0x3fd335d3UL, 0xfcd38c82UL,
-  0xbe4356e1UL, 0x80000000UL, 0x3fd30e87UL, 0x64f54accUL, 0xbe4e6224UL,
-  0x00000000UL, 0x3fd2e74cUL, 0xaa7975d9UL, 0x3e5dc0feUL, 0x80000000UL,
-  0x3fd2c021UL, 0x516dab3fUL, 0xbe50ffa3UL, 0x40000000UL, 0x3fd29907UL,
-  0x2bfb7313UL, 0x3e5674a2UL, 0xc0000000UL, 0x3fd271fdUL, 0x0549fc99UL,
-  0x3e385d29UL, 0xc0000000UL, 0x3fd24b04UL, 0x55b63073UL, 0xbe500c6dUL,
-  0x00000000UL, 0x3fd2241cUL, 0x3f91953aUL, 0x3e389977UL, 0xc0000000UL,
-  0x3fd1fd43UL, 0xa1543f71UL, 0xbe3487abUL, 0xc0000000UL, 0x3fd1d67bUL,
-  0x4ec8867cUL, 0x3df6a2dcUL, 0x00000000UL, 0x3fd1afc4UL, 0x4328e3bbUL,
-  0x3e41d9c0UL, 0x80000000UL, 0x3fd1891cUL, 0x2e1cda84UL, 0x3e3bdd87UL,
-  0x40000000UL, 0x3fd16285UL, 0x4b5331aeUL, 0xbe53128eUL, 0x00000000UL,
-  0x3fd13bfeUL, 0xb9aec164UL, 0xbe52ac98UL, 0xc0000000UL, 0x3fd11586UL,
-  0xd91e1316UL, 0xbe350630UL, 0x80000000UL, 0x3fd0ef1fUL, 0x7cacc12cUL,
-  0x3e3f5219UL, 0x40000000UL, 0x3fd0c8c8UL, 0xbce277b7UL, 0x3e3d30c0UL,
-  0x00000000UL, 0x3fd0a281UL, 0x2a63447dUL, 0xbe541377UL, 0x80000000UL,
-  0x3fd07c49UL, 0xfac483b5UL, 0xbe5772ecUL, 0xc0000000UL, 0x3fd05621UL,
-  0x36b8a570UL, 0xbe4fd4bdUL, 0xc0000000UL, 0x3fd03009UL, 0xbae505f7UL,
-  0xbe450388UL, 0x80000000UL, 0x3fd00a01UL, 0x3e35aeadUL, 0xbe5430fcUL,
-  0x80000000UL, 0x3fcfc811UL, 0x707475acUL, 0x3e38806eUL, 0x80000000UL,
-  0x3fcf7c3fUL, 0xc91817fcUL, 0xbe40cceaUL, 0x80000000UL, 0x3fcf308cUL,
-  0xae05d5e9UL, 0xbe4919b8UL, 0x80000000UL, 0x3fcee4f8UL, 0xae6cc9e6UL,
-  0xbe530b94UL, 0x00000000UL, 0x3fce9983UL, 0x1efe3e8eUL, 0x3e57747eUL,
-  0x00000000UL, 0x3fce4e2dUL, 0xda78d9bfUL, 0xbe59a608UL, 0x00000000UL,
-  0x3fce02f5UL, 0x8abe2c2eUL, 0x3e4a35adUL, 0x00000000UL, 0x3fcdb7dcUL,
-  0x1495450dUL, 0xbe0872ccUL, 0x80000000UL, 0x3fcd6ce1UL, 0x86ee0ba0UL,
-  0xbe4f59a0UL, 0x00000000UL, 0x3fcd2205UL, 0xe81ca888UL, 0x3e5402c3UL,
-  0x00000000UL, 0x3fccd747UL, 0x3b4424b9UL, 0x3e5dfdc3UL, 0x80000000UL,
-  0x3fcc8ca7UL, 0xd305b56cUL, 0x3e202da6UL, 0x00000000UL, 0x3fcc4226UL,
-  0x399a6910UL, 0xbe482a1cUL, 0x80000000UL, 0x3fcbf7c2UL, 0x747f7938UL,
-  0xbe587372UL, 0x80000000UL, 0x3fcbad7cUL, 0x6fc246a0UL, 0x3e50d83dUL,
-  0x00000000UL, 0x3fcb6355UL, 0xee9e9be5UL, 0xbe5c35bdUL, 0x80000000UL,
-  0x3fcb194aUL, 0x8416c0bcUL, 0x3e546d4fUL, 0x00000000UL, 0x3fcacf5eUL,
-  0x49f7f08fUL, 0x3e56da76UL, 0x00000000UL, 0x3fca858fUL, 0x5dc30de2UL,
-  0x3e5f390cUL, 0x00000000UL, 0x3fca3bdeUL, 0x950583b6UL, 0xbe5e4169UL,
-  0x80000000UL, 0x3fc9f249UL, 0x33631553UL, 0x3e52aeb1UL, 0x00000000UL,
-  0x3fc9a8d3UL, 0xde8795a6UL, 0xbe59a504UL, 0x00000000UL, 0x3fc95f79UL,
-  0x076bf41eUL, 0x3e5122feUL, 0x80000000UL, 0x3fc9163cUL, 0x2914c8e7UL,
-  0x3e3dd064UL, 0x00000000UL, 0x3fc8cd1dUL, 0x3a30eca3UL, 0xbe21b4aaUL,
-  0x80000000UL, 0x3fc8841aUL, 0xb2a96650UL, 0xbe575444UL, 0x80000000UL,
-  0x3fc83b34UL, 0x2376c0cbUL, 0xbe2a74c7UL, 0x80000000UL, 0x3fc7f26bUL,
-  0xd8a0b653UL, 0xbe5181b6UL, 0x00000000UL, 0x3fc7a9bfUL, 0x32257882UL,
-  0xbe4a78b4UL, 0x00000000UL, 0x3fc7612fUL, 0x1eee8bd9UL, 0xbe1bfe9dUL,
-  0x80000000UL, 0x3fc718bbUL, 0x0c603cc4UL, 0x3e36fdc9UL, 0x80000000UL,
-  0x3fc6d064UL, 0x3728b8cfUL, 0xbe1e542eUL, 0x80000000UL, 0x3fc68829UL,
-  0xc79a4067UL, 0x3e5c380fUL, 0x00000000UL, 0x3fc6400bUL, 0xf69eac69UL,
-  0x3e550a84UL, 0x80000000UL, 0x3fc5f808UL, 0xb7a780a4UL, 0x3e5d9224UL,
-  0x80000000UL, 0x3fc5b022UL, 0xad9dfb1eUL, 0xbe55242fUL, 0x00000000UL,
-  0x3fc56858UL, 0x659b18beUL, 0xbe4bfda3UL, 0x80000000UL, 0x3fc520a9UL,
-  0x66ee3631UL, 0xbe57d769UL, 0x80000000UL, 0x3fc4d916UL, 0x1ec62819UL,
-  0x3e2427f7UL, 0x80000000UL, 0x3fc4919fUL, 0xdec25369UL, 0xbe435431UL,
-  0x00000000UL, 0x3fc44a44UL, 0xa8acfc4bUL, 0xbe3c62e8UL, 0x00000000UL,
-  0x3fc40304UL, 0xcf1d3eabUL, 0xbdfba29fUL, 0x80000000UL, 0x3fc3bbdfUL,
-  0x79aba3eaUL, 0xbdf1b7c8UL, 0x80000000UL, 0x3fc374d6UL, 0xb8d186daUL,
-  0xbe5130cfUL, 0x80000000UL, 0x3fc32de8UL, 0x9d74f152UL, 0x3e2285b6UL,
-  0x00000000UL, 0x3fc2e716UL, 0x50ae7ca9UL, 0xbe503920UL, 0x80000000UL,
-  0x3fc2a05eUL, 0x6caed92eUL, 0xbe533924UL, 0x00000000UL, 0x3fc259c2UL,
-  0x9cb5034eUL, 0xbe510e31UL, 0x80000000UL, 0x3fc21340UL, 0x12c4d378UL,
-  0xbe540b43UL, 0x80000000UL, 0x3fc1ccd9UL, 0xcc418706UL, 0x3e59887aUL,
-  0x00000000UL, 0x3fc1868eUL, 0x921f4106UL, 0xbe528e67UL, 0x80000000UL,
-  0x3fc1405cUL, 0x3969441eUL, 0x3e5d8051UL, 0x00000000UL, 0x3fc0fa46UL,
-  0xd941ef5bUL, 0x3e5f9079UL, 0x80000000UL, 0x3fc0b44aUL, 0x5a3e81b2UL,
-  0xbe567691UL, 0x00000000UL, 0x3fc06e69UL, 0x9d66afe7UL, 0xbe4d43fbUL,
-  0x00000000UL, 0x3fc028a2UL, 0x0a92a162UL, 0xbe52f394UL, 0x00000000UL,
-  0x3fbfc5eaUL, 0x209897e5UL, 0x3e529e37UL, 0x00000000UL, 0x3fbf3ac5UL,
-  0x8458bd7bUL, 0x3e582831UL, 0x00000000UL, 0x3fbeafd5UL, 0xb8d8b4b8UL,
-  0xbe486b4aUL, 0x00000000UL, 0x3fbe2518UL, 0xe0a3b7b6UL, 0x3e5bafd2UL,
-  0x00000000UL, 0x3fbd9a90UL, 0x2bf2710eUL, 0x3e383b2bUL, 0x00000000UL,
-  0x3fbd103cUL, 0x73eb6ab7UL, 0xbe56d78dUL, 0x00000000UL, 0x3fbc861bUL,
-  0x32ceaff5UL, 0xbe32dc5aUL, 0x00000000UL, 0x3fbbfc2eUL, 0xbee04cb7UL,
-  0xbe4a71a4UL, 0x00000000UL, 0x3fbb7274UL, 0x35ae9577UL, 0x3e38142fUL,
-  0x00000000UL, 0x3fbae8eeUL, 0xcbaddab4UL, 0xbe5490f0UL, 0x00000000UL,
-  0x3fba5f9aUL, 0x95ce1114UL, 0x3e597c71UL, 0x00000000UL, 0x3fb9d67aUL,
-  0x6d7c0f78UL, 0x3e3abc2dUL, 0x00000000UL, 0x3fb94d8dUL, 0x2841a782UL,
-  0xbe566cbcUL, 0x00000000UL, 0x3fb8c4d2UL, 0x6ed429c6UL, 0xbe3cfff9UL,
-  0x00000000UL, 0x3fb83c4aUL, 0xe4a49fbbUL, 0xbe552964UL, 0x00000000UL,
-  0x3fb7b3f4UL, 0x2193d81eUL, 0xbe42fa72UL, 0x00000000UL, 0x3fb72bd0UL,
-  0xdd70c122UL, 0x3e527a8cUL, 0x00000000UL, 0x3fb6a3dfUL, 0x03108a54UL,
-  0xbe450393UL, 0x00000000UL, 0x3fb61c1fUL, 0x30ff7954UL, 0x3e565840UL,
-  0x00000000UL, 0x3fb59492UL, 0xdedd460cUL, 0xbe5422b5UL, 0x00000000UL,
-  0x3fb50d36UL, 0x950f9f45UL, 0xbe5313f6UL, 0x00000000UL, 0x3fb4860bUL,
-  0x582cdcb1UL, 0x3e506d39UL, 0x00000000UL, 0x3fb3ff12UL, 0x7216d3a6UL,
-  0x3e4aa719UL, 0x00000000UL, 0x3fb3784aUL, 0x57a423fdUL, 0x3e5a9b9fUL,
-  0x00000000UL, 0x3fb2f1b4UL, 0x7a138b41UL, 0xbe50b418UL, 0x00000000UL,
-  0x3fb26b4eUL, 0x2fbfd7eaUL, 0x3e23a53eUL, 0x00000000UL, 0x3fb1e519UL,
-  0x18913ccbUL, 0x3e465fc1UL, 0x00000000UL, 0x3fb15f15UL, 0x7ea24e21UL,
-  0x3e042843UL, 0x00000000UL, 0x3fb0d941UL, 0x7c6d9c77UL, 0x3e59f61eUL,
-  0x00000000UL, 0x3fb0539eUL, 0x114efd44UL, 0x3e4ccab7UL, 0x00000000UL,
-  0x3faf9c56UL, 0x1777f657UL, 0x3e552f65UL, 0x00000000UL, 0x3fae91d2UL,
-  0xc317b86aUL, 0xbe5a61e0UL, 0x00000000UL, 0x3fad87acUL, 0xb7664efbUL,
-  0xbe41f64eUL, 0x00000000UL, 0x3fac7de6UL, 0x5d3d03a9UL, 0x3e0807a0UL,
-  0x00000000UL, 0x3fab7480UL, 0x743c38ebUL, 0xbe3726e1UL, 0x00000000UL,
-  0x3faa6b78UL, 0x06a253f1UL, 0x3e5ad636UL, 0x00000000UL, 0x3fa962d0UL,
-  0xa35f541bUL, 0x3e5a187aUL, 0x00000000UL, 0x3fa85a88UL, 0x4b86e446UL,
-  0xbe508150UL, 0x00000000UL, 0x3fa7529cUL, 0x2589cacfUL, 0x3e52938aUL,
-  0x00000000UL, 0x3fa64b10UL, 0xaf6b11f2UL, 0xbe3454cdUL, 0x00000000UL,
-  0x3fa543e2UL, 0x97506fefUL, 0xbe5fdec5UL, 0x00000000UL, 0x3fa43d10UL,
-  0xe75f7dd9UL, 0xbe388dd3UL, 0x00000000UL, 0x3fa3369cUL, 0xa4139632UL,
-  0xbdea5177UL, 0x00000000UL, 0x3fa23086UL, 0x352d6f1eUL, 0xbe565ad6UL,
-  0x00000000UL, 0x3fa12accUL, 0x77449eb7UL, 0xbe50d5c7UL, 0x00000000UL,
-  0x3fa0256eUL, 0x7478da78UL, 0x3e404724UL, 0x00000000UL, 0x3f9e40dcUL,
-  0xf59cef7fUL, 0xbe539d0aUL, 0x00000000UL, 0x3f9c3790UL, 0x1511d43cUL,
-  0x3e53c2c8UL, 0x00000000UL, 0x3f9a2f00UL, 0x9b8bff3cUL, 0xbe43b3e1UL,
-  0x00000000UL, 0x3f982724UL, 0xad1e22a5UL, 0x3e46f0bdUL, 0x00000000UL,
-  0x3f962000UL, 0x130d9356UL, 0x3e475ba0UL, 0x00000000UL, 0x3f941994UL,
-  0x8f86f883UL, 0xbe513d0bUL, 0x00000000UL, 0x3f9213dcUL, 0x914d0dc8UL,
-  0xbe534335UL, 0x00000000UL, 0x3f900ed8UL, 0x2d73e5e7UL, 0xbe22ba75UL,
-  0x00000000UL, 0x3f8c1510UL, 0xc5b7d70eUL, 0x3e599c5dUL, 0x00000000UL,
-  0x3f880de0UL, 0x8a27857eUL, 0xbe3d28c8UL, 0x00000000UL, 0x3f840810UL,
-  0xda767328UL, 0x3e531b3dUL, 0x00000000UL, 0x3f8003b0UL, 0x77bacaf3UL,
-  0xbe5f04e3UL, 0x00000000UL, 0x3f780150UL, 0xdf4b0720UL, 0x3e5a8bffUL,
-  0x00000000UL, 0x3f6ffc40UL, 0x34c48e71UL, 0xbe3fcd99UL, 0x00000000UL,
-  0x3f5ff6c0UL, 0x1ad218afUL, 0xbe4c78a7UL, 0x00000000UL, 0x00000000UL,
-  0x00000000UL, 0x80000000UL
-};
-
-ALIGNED_(8) juint _log2_pow[] =
-{
-  0xfefa39efUL, 0x3fe62e42UL, 0xfefa39efUL, 0xbfe62e42UL
-};
-
-//registers,
-// input: xmm0, xmm1
-// scratch: xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7
-//          rax, rdx, rcx, r8, r11
-
-// Code generated by Intel C compiler for LIBM library
-
-void MacroAssembler::fast_pow(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ecx, Register edx, Register tmp1, Register tmp2, Register tmp3, Register tmp4) {
-  Label L_2TAG_PACKET_0_0_2, L_2TAG_PACKET_1_0_2, L_2TAG_PACKET_2_0_2, L_2TAG_PACKET_3_0_2;
-  Label L_2TAG_PACKET_4_0_2, L_2TAG_PACKET_5_0_2, L_2TAG_PACKET_6_0_2, L_2TAG_PACKET_7_0_2;
-  Label L_2TAG_PACKET_8_0_2, L_2TAG_PACKET_9_0_2, L_2TAG_PACKET_10_0_2, L_2TAG_PACKET_11_0_2;
-  Label L_2TAG_PACKET_12_0_2, L_2TAG_PACKET_13_0_2, L_2TAG_PACKET_14_0_2, L_2TAG_PACKET_15_0_2;
-  Label L_2TAG_PACKET_16_0_2, L_2TAG_PACKET_17_0_2, L_2TAG_PACKET_18_0_2, L_2TAG_PACKET_19_0_2;
-  Label L_2TAG_PACKET_20_0_2, L_2TAG_PACKET_21_0_2, L_2TAG_PACKET_22_0_2, L_2TAG_PACKET_23_0_2;
-  Label L_2TAG_PACKET_24_0_2, L_2TAG_PACKET_25_0_2, L_2TAG_PACKET_26_0_2, L_2TAG_PACKET_27_0_2;
-  Label L_2TAG_PACKET_28_0_2, L_2TAG_PACKET_29_0_2, L_2TAG_PACKET_30_0_2, L_2TAG_PACKET_31_0_2;
-  Label L_2TAG_PACKET_32_0_2, L_2TAG_PACKET_33_0_2, L_2TAG_PACKET_34_0_2, L_2TAG_PACKET_35_0_2;
-  Label L_2TAG_PACKET_36_0_2, L_2TAG_PACKET_37_0_2, L_2TAG_PACKET_38_0_2, L_2TAG_PACKET_39_0_2;
-  Label L_2TAG_PACKET_40_0_2, L_2TAG_PACKET_41_0_2, L_2TAG_PACKET_42_0_2, L_2TAG_PACKET_43_0_2;
-  Label L_2TAG_PACKET_44_0_2, L_2TAG_PACKET_45_0_2, L_2TAG_PACKET_46_0_2, L_2TAG_PACKET_47_0_2;
-  Label L_2TAG_PACKET_48_0_2, L_2TAG_PACKET_49_0_2, L_2TAG_PACKET_50_0_2, L_2TAG_PACKET_51_0_2;
-  Label L_2TAG_PACKET_52_0_2, L_2TAG_PACKET_53_0_2, L_2TAG_PACKET_54_0_2, L_2TAG_PACKET_55_0_2;
-  Label L_2TAG_PACKET_56_0_2;
-  Label B1_2, B1_3, B1_5, start;
-
-  assert_different_registers(tmp1, tmp2, eax, ecx, edx);
-  jmp(start);
-  address HIGHSIGMASK = (address)_HIGHSIGMASK;
-  address LOG2_E = (address)_LOG2_E;
-  address coeff = (address)_coeff_pow;
-  address L_tbl = (address)_L_tbl_pow;
-  address HIGHMASK_Y = (address)_HIGHMASK_Y;
-  address T_exp = (address)_T_exp;
-  address e_coeff = (address)_e_coeff;
-  address coeff_h = (address)_coeff_h;
-  address HIGHMASK_LOG_X = (address)_HIGHMASK_LOG_X;
-  address HALFMASK = (address)_HALFMASK;
-  address log2 = (address)_log2_pow;
-
-
-  bind(start);
-  subq(rsp, 40);
-  movsd(Address(rsp, 8), xmm0);
-  movsd(Address(rsp, 16), xmm1);
-
-  bind(B1_2);
-  pextrw(eax, xmm0, 3);
-  xorpd(xmm2, xmm2);
-  mov64(tmp2, 0x3ff0000000000000);
-  movdq(xmm2, tmp2);
-  movl(tmp1, 1069088768);
-  movdq(xmm7, tmp1);
-  xorpd(xmm1, xmm1);
-  mov64(tmp3, 0x77f0000000000000);
-  movdq(xmm1, tmp3);
-  movdqu(xmm3, xmm0);
-  movl(edx, 32752);
-  andl(edx, eax);
-  subl(edx, 16368);
-  movl(ecx, edx);
-  sarl(edx, 31);
-  addl(ecx, edx);
-  xorl(ecx, edx);
-  por(xmm0, xmm2);
-  movdqu(xmm6, ExternalAddress(HIGHSIGMASK));    //0x00000000UL, 0xfffff800UL, 0x00000000UL, 0xfffff800UL
-  psrlq(xmm0, 27);
-  movq(xmm2, ExternalAddress(LOG2_E));    //0x00000000UL, 0x3ff72000UL, 0x161bb241UL, 0xbf5dabe1UL
-  psrld(xmm0, 2);
-  addl(ecx, 16);
-  bsrl(ecx, ecx);
-  rcpps(xmm0, xmm0);
-  psllq(xmm3, 12);
-  movl(tmp4, 8192);
-  movdq(xmm4, tmp4);
-  psrlq(xmm3, 12);
-  subl(eax, 16);
-  cmpl(eax, 32736);
-  jcc(Assembler::aboveEqual, L_2TAG_PACKET_0_0_2);
-  movl(tmp1, 0);
-
-  bind(L_2TAG_PACKET_1_0_2);
-  mulss(xmm0, xmm7);
-  movl(edx, -1);
-  subl(ecx, 4);
-  shll(edx);
-  shlq(edx, 32);
-  movdq(xmm5, edx);
-  por(xmm3, xmm1);
-  subl(eax, 16351);
-  cmpl(eax, 1);
-  jcc(Assembler::belowEqual, L_2TAG_PACKET_2_0_2);
-  paddd(xmm0, xmm4);
-  pand(xmm5, xmm3);
-  movdl(edx, xmm0);
-  psllq(xmm0, 29);
-
-  bind(L_2TAG_PACKET_3_0_2);
-  subsd(xmm3, xmm5);
-  pand(xmm0, xmm6);
-  subl(eax, 1);
-  sarl(eax, 4);
-  cvtsi2sdl(xmm7, eax);
-  mulpd(xmm5, xmm0);
-
-  bind(L_2TAG_PACKET_4_0_2);
-  mulsd(xmm3, xmm0);
-  movdqu(xmm1, ExternalAddress(coeff));    //0x6dc96112UL, 0xbf836578UL, 0xee241472UL, 0xbf9b0301UL
-  lea(tmp4, ExternalAddress(L_tbl));
-  subsd(xmm5, xmm2);
-  movdqu(xmm4, ExternalAddress(16 + coeff));    //0x9f95985aUL, 0xbfb528dbUL, 0xb3841d2aUL, 0xbfd619b6UL
-  movl(ecx, eax);
-  sarl(eax, 31);
-  addl(ecx, eax);
-  xorl(eax, ecx);
-  addl(eax, 1);
-  bsrl(eax, eax);
-  unpcklpd(xmm5, xmm3);
-  movdqu(xmm6, ExternalAddress(32 + coeff));    //0x518775e3UL, 0x3f9004f2UL, 0xac8349bbUL, 0x3fa76c9bUL
-  addsd(xmm3, xmm5);
-  andl(edx, 16760832);
-  shrl(edx, 10);
-  addpd(xmm5, Address(tmp4, edx, Address::times_1, -3648));
-  movdqu(xmm0, ExternalAddress(48 + coeff));    //0x486ececcUL, 0x3fc4635eUL, 0x161bb241UL, 0xbf5dabe1UL
-  pshufd(xmm2, xmm3, 68);
-  mulsd(xmm3, xmm3);
-  mulpd(xmm1, xmm2);
-  mulpd(xmm4, xmm2);
-  addsd(xmm5, xmm7);
-  mulsd(xmm2, xmm3);
-  addpd(xmm6, xmm1);
-  mulsd(xmm3, xmm3);
-  addpd(xmm0, xmm4);
-  movq(xmm1, Address(rsp, 16));
-  movw(ecx, Address(rsp, 22));
-  pshufd(xmm7, xmm5, 238);
-  movq(xmm4, ExternalAddress(HIGHMASK_Y));    //0x00000000UL, 0xfffffff8UL, 0x00000000UL, 0xffffffffUL
-  mulpd(xmm6, xmm2);
-  pshufd(xmm3, xmm3, 68);
-  mulpd(xmm0, xmm2);
-  shll(eax, 4);
-  subl(eax, 15872);
-  andl(ecx, 32752);
-  addl(eax, ecx);
-  mulpd(xmm3, xmm6);
-  cmpl(eax, 624);
-  jcc(Assembler::aboveEqual, L_2TAG_PACKET_5_0_2);
-  xorpd(xmm6, xmm6);
-  movl(edx, 17080);
-  pinsrw(xmm6, edx, 3);
-  movdqu(xmm2, xmm1);
-  pand(xmm4, xmm1);
-  subsd(xmm1, xmm4);
-  mulsd(xmm4, xmm5);
-  addsd(xmm0, xmm7);
-  mulsd(xmm1, xmm5);
-  movdqu(xmm7, xmm6);
-  addsd(xmm6, xmm4);
-  lea(tmp4, ExternalAddress(T_exp));
-  addpd(xmm3, xmm0);
-  movdl(edx, xmm6);
-  subsd(xmm6, xmm7);
-  pshufd(xmm0, xmm3, 238);
-  subsd(xmm4, xmm6);
-  addsd(xmm0, xmm3);
-  movl(ecx, edx);
-  andl(edx, 255);
-  addl(edx, edx);
-  movdqu(xmm5, Address(tmp4, edx, Address::times_8, 0));
-  addsd(xmm4, xmm1);
-  mulsd(xmm2, xmm0);
-  movdqu(xmm7, ExternalAddress(e_coeff));    //0xe78a6731UL, 0x3f55d87fUL, 0xd704a0c0UL, 0x3fac6b08UL
-  movdqu(xmm3, ExternalAddress(16 + e_coeff));    //0x6fba4e77UL, 0x3f83b2abUL, 0xff82c58fUL, 0x3fcebfbdUL
-  shll(ecx, 12);
-  xorl(ecx, tmp1);
-  andl(rcx, -1048576);
-  movdq(xmm6, rcx);
-  addsd(xmm2, xmm4);
-  mov64(tmp2, 0x3fe62e42fefa39ef);
-  movdq(xmm1, tmp2);
-  pshufd(xmm0, xmm2, 68);
-  pshufd(xmm4, xmm2, 68);
-  mulsd(xmm1, xmm2);
-  pshufd(xmm6, xmm6, 17);
-  mulpd(xmm0, xmm0);
-  mulpd(xmm7, xmm4);
-  paddd(xmm5, xmm6);
-  mulsd(xmm1, xmm5);
-  pshufd(xmm6, xmm5, 238);
-  mulsd(xmm0, xmm0);
-  addpd(xmm3, xmm7);
-  addsd(xmm1, xmm6);
-  mulpd(xmm0, xmm3);
-  pshufd(xmm3, xmm0, 238);
-  mulsd(xmm0, xmm5);
-  mulsd(xmm3, xmm5);
-  addsd(xmm0, xmm1);
-  addsd(xmm0, xmm3);
-  addsd(xmm0, xmm5);
-  jmp(B1_5);
-
-  bind(L_2TAG_PACKET_0_0_2);
-  addl(eax, 16);
-  movl(edx, 32752);
-  andl(edx, eax);
-  cmpl(edx, 32752);
-  jcc(Assembler::equal, L_2TAG_PACKET_6_0_2);
-  testl(eax, 32768);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_7_0_2);
-
-  bind(L_2TAG_PACKET_8_0_2);
-  movq(xmm0, Address(rsp, 8));
-  movq(xmm3, Address(rsp, 8));
-  movdl(edx, xmm3);
-  psrlq(xmm3, 32);
-  movdl(ecx, xmm3);
-  orl(edx, ecx);
-  cmpl(edx, 0);
-  jcc(Assembler::equal, L_2TAG_PACKET_9_0_2);
-  xorpd(xmm3, xmm3);
-  movl(eax, 18416);
-  pinsrw(xmm3, eax, 3);
-  mulsd(xmm0, xmm3);
-  xorpd(xmm2, xmm2);
-  movl(eax, 16368);
-  pinsrw(xmm2, eax, 3);
-  movdqu(xmm3, xmm0);
-  pextrw(eax, xmm0, 3);
-  por(xmm0, xmm2);
-  movl(ecx, 18416);
-  psrlq(xmm0, 27);
-  movq(xmm2, ExternalAddress(LOG2_E));    //0x00000000UL, 0x3ff72000UL, 0x161bb241UL, 0xbf5dabe1UL
-  psrld(xmm0, 2);
-  rcpps(xmm0, xmm0);
-  psllq(xmm3, 12);
-  movdqu(xmm6, ExternalAddress(HIGHSIGMASK));    //0x00000000UL, 0xfffff800UL, 0x00000000UL, 0xfffff800UL
-  psrlq(xmm3, 12);
-  mulss(xmm0, xmm7);
-  movl(edx, -1024);
-  movdl(xmm5, edx);
-  por(xmm3, xmm1);
-  paddd(xmm0, xmm4);
-  psllq(xmm5, 32);
-  movdl(edx, xmm0);
-  psllq(xmm0, 29);
-  pand(xmm5, xmm3);
-  movl(tmp1, 0);
-  pand(xmm0, xmm6);
-  subsd(xmm3, xmm5);
-  andl(eax, 32752);
-  subl(eax, 18416);
-  sarl(eax, 4);
-  cvtsi2sdl(xmm7, eax);
-  mulpd(xmm5, xmm0);
-  jmp(L_2TAG_PACKET_4_0_2);
-
-  bind(L_2TAG_PACKET_10_0_2);
-  movq(xmm0, Address(rsp, 8));
-  movq(xmm3, Address(rsp, 8));
-  movdl(edx, xmm3);
-  psrlq(xmm3, 32);
-  movdl(ecx, xmm3);
-  orl(edx, ecx);
-  cmpl(edx, 0);
-  jcc(Assembler::equal, L_2TAG_PACKET_9_0_2);
-  xorpd(xmm3, xmm3);
-  movl(eax, 18416);
-  pinsrw(xmm3, eax, 3);
-  mulsd(xmm0, xmm3);
-  xorpd(xmm2, xmm2);
-  movl(eax, 16368);
-  pinsrw(xmm2, eax, 3);
-  movdqu(xmm3, xmm0);
-  pextrw(eax, xmm0, 3);
-  por(xmm0, xmm2);
-  movl(ecx, 18416);
-  psrlq(xmm0, 27);
-  movq(xmm2, ExternalAddress(LOG2_E));    //0x00000000UL, 0x3ff72000UL, 0x161bb241UL, 0xbf5dabe1UL
-  psrld(xmm0, 2);
-  rcpps(xmm0, xmm0);
-  psllq(xmm3, 12);
-  movdqu(xmm6, ExternalAddress(HIGHSIGMASK));    //0x00000000UL, 0xfffff800UL, 0x00000000UL, 0xfffff800UL
-  psrlq(xmm3, 12);
-  mulss(xmm0, xmm7);
-  movl(edx, -1024);
-  movdl(xmm5, edx);
-  por(xmm3, xmm1);
-  paddd(xmm0, xmm4);
-  psllq(xmm5, 32);
-  movdl(edx, xmm0);
-  psllq(xmm0, 29);
-  pand(xmm5, xmm3);
-  movl(tmp1, INT_MIN);
-  pand(xmm0, xmm6);
-  subsd(xmm3, xmm5);
-  andl(eax, 32752);
-  subl(eax, 18416);
-  sarl(eax, 4);
-  cvtsi2sdl(xmm7, eax);
-  mulpd(xmm5, xmm0);
-  jmp(L_2TAG_PACKET_4_0_2);
-
-  bind(L_2TAG_PACKET_5_0_2);
-  cmpl(eax, 0);
-  jcc(Assembler::less, L_2TAG_PACKET_11_0_2);
-  cmpl(eax, 752);
-  jcc(Assembler::aboveEqual, L_2TAG_PACKET_12_0_2);
-  addsd(xmm0, xmm7);
-  movq(xmm2, ExternalAddress(HALFMASK));    //0xf8000000UL, 0xffffffffUL, 0xf8000000UL, 0xffffffffUL
-  addpd(xmm3, xmm0);
-  xorpd(xmm6, xmm6);
-  movl(eax, 17080);
-  pinsrw(xmm6, eax, 3);
-  pshufd(xmm0, xmm3, 238);
-  addsd(xmm0, xmm3);
-  movdqu(xmm3, xmm5);
-  addsd(xmm5, xmm0);
-  movdqu(xmm4, xmm2);
-  subsd(xmm3, xmm5);
-  movdqu(xmm7, xmm5);
-  pand(xmm5, xmm2);
-  movdqu(xmm2, xmm1);
-  pand(xmm4, xmm1);
-  subsd(xmm7, xmm5);
-  addsd(xmm0, xmm3);
-  subsd(xmm1, xmm4);
-  mulsd(xmm4, xmm5);
-  addsd(xmm0, xmm7);
-  mulsd(xmm2, xmm0);
-  movdqu(xmm7, xmm6);
-  mulsd(xmm1, xmm5);
-  addsd(xmm6, xmm4);
-  movdl(eax, xmm6);
-  subsd(xmm6, xmm7);
-  lea(tmp4, ExternalAddress(T_exp));
-  addsd(xmm2, xmm1);
-  movdqu(xmm7, ExternalAddress(e_coeff));    //0xe78a6731UL, 0x3f55d87fUL, 0xd704a0c0UL, 0x3fac6b08UL
-  movdqu(xmm3, ExternalAddress(16 + e_coeff));    //0x6fba4e77UL, 0x3f83b2abUL, 0xff82c58fUL, 0x3fcebfbdUL
-  subsd(xmm4, xmm6);
-  pextrw(edx, xmm6, 3);
-  movl(ecx, eax);
-  andl(eax, 255);
-  addl(eax, eax);
-  movdqu(xmm5, Address(tmp4, rax, Address::times_8, 0));
-  addsd(xmm2, xmm4);
-  sarl(ecx, 8);
-  movl(eax, ecx);
-  sarl(ecx, 1);
-  subl(eax, ecx);
-  shll(ecx, 20);
-  xorl(ecx, tmp1);
-  movdl(xmm6, ecx);
-  movq(xmm1, ExternalAddress(32 + e_coeff));    //0xfefa39efUL, 0x3fe62e42UL, 0x00000000UL, 0x00000000UL
-  andl(edx, 32767);
-  cmpl(edx, 16529);
-  jcc(Assembler::above, L_2TAG_PACKET_12_0_2);
-  pshufd(xmm0, xmm2, 68);
-  pshufd(xmm4, xmm2, 68);
-  mulpd(xmm0, xmm0);
-  mulpd(xmm7, xmm4);
-  pshufd(xmm6, xmm6, 17);
-  mulsd(xmm1, xmm2);
-  mulsd(xmm0, xmm0);
-  paddd(xmm5, xmm6);
-  addpd(xmm3, xmm7);
-  mulsd(xmm1, xmm5);
-  pshufd(xmm6, xmm5, 238);
-  mulpd(xmm0, xmm3);
-  addsd(xmm1, xmm6);
-  pshufd(xmm3, xmm0, 238);
-  mulsd(xmm0, xmm5);
-  mulsd(xmm3, xmm5);
-  shll(eax, 4);
-  xorpd(xmm4, xmm4);
-  addl(eax, 16368);
-  pinsrw(xmm4, eax, 3);
-  addsd(xmm0, xmm1);
-  addsd(xmm0, xmm3);
-  movdqu(xmm1, xmm0);
-  addsd(xmm0, xmm5);
-  mulsd(xmm0, xmm4);
-  pextrw(eax, xmm0, 3);
-  andl(eax, 32752);
-  jcc(Assembler::equal, L_2TAG_PACKET_13_0_2);
-  cmpl(eax, 32752);
-  jcc(Assembler::equal, L_2TAG_PACKET_14_0_2);
-  jmp(B1_5);
-
-  bind(L_2TAG_PACKET_6_0_2);
-  movq(xmm1, Address(rsp, 16));
-  movq(xmm0, Address(rsp, 8));
-  movdqu(xmm2, xmm0);
-  movdl(eax, xmm2);
-  psrlq(xmm2, 20);
-  movdl(edx, xmm2);
-  orl(eax, edx);
-  jcc(Assembler::equal, L_2TAG_PACKET_15_0_2);
-  movdl(eax, xmm1);
-  psrlq(xmm1, 32);
-  movdl(edx, xmm1);
-  movl(ecx, edx);
-  addl(edx, edx);
-  orl(eax, edx);
-  jcc(Assembler::equal, L_2TAG_PACKET_16_0_2);
-  addsd(xmm0, xmm0);
-  jmp(B1_5);
-
-  bind(L_2TAG_PACKET_16_0_2);
-  xorpd(xmm0, xmm0);
-  movl(eax, 16368);
-  pinsrw(xmm0, eax, 3);
-  movl(Address(rsp, 0), 29);
-  jmp(L_2TAG_PACKET_17_0_2);
-
-  bind(L_2TAG_PACKET_18_0_2);
-  movq(xmm0, Address(rsp, 16));
-  addpd(xmm0, xmm0);
-  jmp(B1_5);
-
-  bind(L_2TAG_PACKET_15_0_2);
-  movdl(eax, xmm1);
-  movdqu(xmm2, xmm1);
-  psrlq(xmm1, 32);
-  movdl(edx, xmm1);
-  movl(ecx, edx);
-  addl(edx, edx);
-  orl(eax, edx);
-  jcc(Assembler::equal, L_2TAG_PACKET_19_0_2);
-  pextrw(eax, xmm2, 3);
-  andl(eax, 32752);
-  cmpl(eax, 32752);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_20_0_2);
-  movdl(eax, xmm2);
-  psrlq(xmm2, 20);
-  movdl(edx, xmm2);
-  orl(eax, edx);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_18_0_2);
-
-  bind(L_2TAG_PACKET_20_0_2);
-  pextrw(eax, xmm0, 3);
-  testl(eax, 32768);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_21_0_2);
-  testl(ecx, INT_MIN);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_22_0_2);
-  jmp(B1_5);
-
-  bind(L_2TAG_PACKET_23_0_2);
-  movq(xmm1, Address(rsp, 16));
-  movdl(eax, xmm1);
-  testl(eax, 1);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_24_0_2);
-  testl(eax, 2);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_25_0_2);
-  jmp(L_2TAG_PACKET_24_0_2);
-
-  bind(L_2TAG_PACKET_21_0_2);
-  shrl(ecx, 20);
-  andl(ecx, 2047);
-  cmpl(ecx, 1075);
-  jcc(Assembler::above, L_2TAG_PACKET_24_0_2);
-  jcc(Assembler::equal, L_2TAG_PACKET_26_0_2);
-  cmpl(ecx, 1074);
-  jcc(Assembler::above, L_2TAG_PACKET_23_0_2);
-  cmpl(ecx, 1023);
-  jcc(Assembler::below, L_2TAG_PACKET_24_0_2);
-  movq(xmm1, Address(rsp, 16));
-  movl(eax, 17208);
-  xorpd(xmm3, xmm3);
-  pinsrw(xmm3, eax, 3);
-  movdqu(xmm4, xmm3);
-  addsd(xmm3, xmm1);
-  subsd(xmm4, xmm3);
-  addsd(xmm1, xmm4);
-  pextrw(eax, xmm1, 3);
-  andl(eax, 32752);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_24_0_2);
-  movdl(eax, xmm3);
-  andl(eax, 1);
-  jcc(Assembler::equal, L_2TAG_PACKET_24_0_2);
-
-  bind(L_2TAG_PACKET_25_0_2);
-  movq(xmm1, Address(rsp, 16));
-  pextrw(eax, xmm1, 3);
-  andl(eax, 32768);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_27_0_2);
-  jmp(B1_5);
-
-  bind(L_2TAG_PACKET_27_0_2);
-  xorpd(xmm0, xmm0);
-  movl(eax, 32768);
-  pinsrw(xmm0, eax, 3);
-  jmp(B1_5);
-
-  bind(L_2TAG_PACKET_24_0_2);
-  movq(xmm1, Address(rsp, 16));
-  pextrw(eax, xmm1, 3);
-  andl(eax, 32768);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_22_0_2);
-  xorpd(xmm0, xmm0);
-  movl(eax, 32752);
-  pinsrw(xmm0, eax, 3);
-  jmp(B1_5);
-
-  bind(L_2TAG_PACKET_26_0_2);
-  movq(xmm1, Address(rsp, 16));
-  movdl(eax, xmm1);
-  andl(eax, 1);
-  jcc(Assembler::equal, L_2TAG_PACKET_24_0_2);
-  jmp(L_2TAG_PACKET_25_0_2);
-
-  bind(L_2TAG_PACKET_28_0_2);
-  movdl(eax, xmm1);
-  psrlq(xmm1, 20);
-  movdl(edx, xmm1);
-  orl(eax, edx);
-  jcc(Assembler::equal, L_2TAG_PACKET_29_0_2);
-  movq(xmm0, Address(rsp, 16));
-  addsd(xmm0, xmm0);
-  jmp(B1_5);
-
-  bind(L_2TAG_PACKET_29_0_2);
-  movq(xmm0, Address(rsp, 8));
-  pextrw(eax, xmm0, 3);
-  cmpl(eax, 49136);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_30_0_2);
-  movdl(ecx, xmm0);
-  psrlq(xmm0, 20);
-  movdl(edx, xmm0);
-  orl(ecx, edx);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_30_0_2);
-  xorpd(xmm0, xmm0);
-  movl(eax, 32760);
-  pinsrw(xmm0, eax, 3);
-  jmp(B1_5);
-
-  bind(L_2TAG_PACKET_30_0_2);
-  movq(xmm1, Address(rsp, 16));
-  andl(eax, 32752);
-  subl(eax, 16368);
-  pextrw(edx, xmm1, 3);
-  xorpd(xmm0, xmm0);
-  xorl(eax, edx);
-  andl(eax, 32768);
-  jcc(Assembler::equal, L_2TAG_PACKET_31_0_2);
-  jmp(B1_5);
-
-  bind(L_2TAG_PACKET_31_0_2);
-  movl(ecx, 32752);
-  pinsrw(xmm0, ecx, 3);
-  jmp(B1_5);
-
-  bind(L_2TAG_PACKET_32_0_2);
-  movdl(eax, xmm1);
-  cmpl(edx, 17184);
-  jcc(Assembler::above, L_2TAG_PACKET_33_0_2);
-  testl(eax, 1);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_34_0_2);
-  testl(eax, 2);
-  jcc(Assembler::equal, L_2TAG_PACKET_35_0_2);
-  jmp(L_2TAG_PACKET_36_0_2);
-
-  bind(L_2TAG_PACKET_33_0_2);
-  testl(eax, 1);
-  jcc(Assembler::equal, L_2TAG_PACKET_35_0_2);
-  jmp(L_2TAG_PACKET_36_0_2);
-
-  bind(L_2TAG_PACKET_7_0_2);
-  movq(xmm2, Address(rsp, 8));
-  movdl(eax, xmm2);
-  psrlq(xmm2, 31);
-  movdl(ecx, xmm2);
-  orl(eax, ecx);
-  jcc(Assembler::equal, L_2TAG_PACKET_9_0_2);
-  movq(xmm1, Address(rsp, 16));
-  pextrw(edx, xmm1, 3);
-  movdl(eax, xmm1);
-  movdqu(xmm2, xmm1);
-  psrlq(xmm2, 32);
-  movdl(ecx, xmm2);
-  addl(ecx, ecx);
-  orl(ecx, eax);
-  jcc(Assembler::equal, L_2TAG_PACKET_37_0_2);
-  andl(edx, 32752);
-  cmpl(edx, 32752);
-  jcc(Assembler::equal, L_2TAG_PACKET_28_0_2);
-  cmpl(edx, 17200);
-  jcc(Assembler::above, L_2TAG_PACKET_35_0_2);
-  cmpl(edx, 17184);
-  jcc(Assembler::aboveEqual, L_2TAG_PACKET_32_0_2);
-  cmpl(edx, 16368);
-  jcc(Assembler::below, L_2TAG_PACKET_34_0_2);
-  movl(eax, 17208);
-  xorpd(xmm2, xmm2);
-  pinsrw(xmm2, eax, 3);
-  movdqu(xmm4, xmm2);
-  addsd(xmm2, xmm1);
-  subsd(xmm4, xmm2);
-  addsd(xmm1, xmm4);
-  pextrw(eax, xmm1, 3);
-  andl(eax, 32767);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_34_0_2);
-  movdl(eax, xmm2);
-  andl(eax, 1);
-  jcc(Assembler::equal, L_2TAG_PACKET_35_0_2);
-
-  bind(L_2TAG_PACKET_36_0_2);
-  xorpd(xmm1, xmm1);
-  movl(edx, 30704);
-  pinsrw(xmm1, edx, 3);
-  movq(xmm2, ExternalAddress(LOG2_E));    //0x00000000UL, 0x3ff72000UL, 0x161bb241UL, 0xbf5dabe1UL
-  movq(xmm4, Address(rsp, 8));
-  pextrw(eax, xmm4, 3);
-  movl(edx, 8192);
-  movdl(xmm4, edx);
-  andl(eax, 32767);
-  subl(eax, 16);
-  jcc(Assembler::less, L_2TAG_PACKET_10_0_2);
-  movl(edx, eax);
-  andl(edx, 32752);
-  subl(edx, 16368);
-  movl(ecx, edx);
-  sarl(edx, 31);
-  addl(ecx, edx);
-  xorl(ecx, edx);
-  addl(ecx, 16);
-  bsrl(ecx, ecx);
-  movl(tmp1, INT_MIN);
-  jmp(L_2TAG_PACKET_1_0_2);
-
-  bind(L_2TAG_PACKET_34_0_2);
-  xorpd(xmm1, xmm1);
-  movl(eax, 32752);
-  pinsrw(xmm1, eax, 3);
-  xorpd(xmm0, xmm0);
-  mulsd(xmm0, xmm1);
-  movl(Address(rsp, 0), 28);
-  jmp(L_2TAG_PACKET_17_0_2);
-
-  bind(L_2TAG_PACKET_35_0_2);
-  xorpd(xmm1, xmm1);
-  movl(edx, 30704);
-  pinsrw(xmm1, edx, 3);
-  movq(xmm2, ExternalAddress(LOG2_E));    //0x00000000UL, 0x3ff72000UL, 0x161bb241UL, 0xbf5dabe1UL
-  movq(xmm4, Address(rsp, 8));
-  pextrw(eax, xmm4, 3);
-  movl(edx, 8192);
-  movdl(xmm4, edx);
-  andl(eax, 32767);
-  subl(eax, 16);
-  jcc(Assembler::less, L_2TAG_PACKET_8_0_2);
-  movl(edx, eax);
-  andl(edx, 32752);
-  subl(edx, 16368);
-  movl(ecx, edx);
-  sarl(edx, 31);
-  addl(ecx, edx);
-  xorl(ecx, edx);
-  addl(ecx, 16);
-  bsrl(ecx, ecx);
-  movl(tmp1, 0);
-  jmp(L_2TAG_PACKET_1_0_2);
-
-  bind(L_2TAG_PACKET_19_0_2);
-  xorpd(xmm0, xmm0);
-  movl(eax, 16368);
-  pinsrw(xmm0, eax, 3);
-  jmp(B1_5);
-
-  bind(L_2TAG_PACKET_22_0_2);
-  xorpd(xmm0, xmm0);
-  jmp(B1_5);
-
-  bind(L_2TAG_PACKET_11_0_2);
-  addl(eax, 384);
-  cmpl(eax, 0);
-  jcc(Assembler::less, L_2TAG_PACKET_38_0_2);
-  mulsd(xmm5, xmm1);
-  addsd(xmm0, xmm7);
-  shrl(tmp1, 31);
-  addpd(xmm3, xmm0);
-  pshufd(xmm0, xmm3, 238);
-  addsd(xmm3, xmm0);
-  lea(tmp4, ExternalAddress(log2));    //0xfefa39efUL, 0x3fe62e42UL, 0xfefa39efUL, 0xbfe62e42UL
-  movq(xmm4, Address(tmp4, tmp1, Address::times_8, 0));
-  mulsd(xmm1, xmm3);
-  xorpd(xmm0, xmm0);
-  movl(eax, 16368);
-  shll(tmp1, 15);
-  orl(eax, tmp1);
-  pinsrw(xmm0, eax, 3);
-  addsd(xmm5, xmm1);
-  mulsd(xmm5, xmm4);
-  addsd(xmm0, xmm5);
-  jmp(B1_5);
-
-  bind(L_2TAG_PACKET_38_0_2);
-
-  bind(L_2TAG_PACKET_37_0_2);
-  xorpd(xmm0, xmm0);
-  movl(eax, 16368);
-  pinsrw(xmm0, eax, 3);
-  jmp(B1_5);
-
-  bind(L_2TAG_PACKET_39_0_2);
-  xorpd(xmm0, xmm0);
-  movl(eax, 16368);
-  pinsrw(xmm0, eax, 3);
-  movl(Address(rsp, 0), 26);
-  jmp(L_2TAG_PACKET_17_0_2);
-
-  bind(L_2TAG_PACKET_9_0_2);
-  movq(xmm1, Address(rsp, 16));
-  movdqu(xmm2, xmm1);
-  pextrw(eax, xmm1, 3);
-  andl(eax, 32752);
-  cmpl(eax, 32752);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_40_0_2);
-  movdl(eax, xmm2);
-  psrlq(xmm2, 20);
-  movdl(edx, xmm2);
-  orl(eax, edx);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_18_0_2);
-
-  bind(L_2TAG_PACKET_40_0_2);
-  movdl(eax, xmm1);
-  psrlq(xmm1, 32);
-  movdl(edx, xmm1);
-  movl(ecx, edx);
-  addl(edx, edx);
-  orl(eax, edx);
-  jcc(Assembler::equal, L_2TAG_PACKET_39_0_2);
-  shrl(edx, 21);
-  cmpl(edx, 1075);
-  jcc(Assembler::above, L_2TAG_PACKET_41_0_2);
-  jcc(Assembler::equal, L_2TAG_PACKET_42_0_2);
-  cmpl(edx, 1023);
-  jcc(Assembler::below, L_2TAG_PACKET_41_0_2);
-  movq(xmm1, Address(rsp, 16));
-  movl(eax, 17208);
-  xorpd(xmm3, xmm3);
-  pinsrw(xmm3, eax, 3);
-  movdqu(xmm4, xmm3);
-  addsd(xmm3, xmm1);
-  subsd(xmm4, xmm3);
-  addsd(xmm1, xmm4);
-  pextrw(eax, xmm1, 3);
-  andl(eax, 32752);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_41_0_2);
-  movdl(eax, xmm3);
-  andl(eax, 1);
-  jcc(Assembler::equal, L_2TAG_PACKET_41_0_2);
-
-  bind(L_2TAG_PACKET_43_0_2);
-  movq(xmm0, Address(rsp, 8));
-  testl(ecx, INT_MIN);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_44_0_2);
-  jmp(B1_5);
-
-  bind(L_2TAG_PACKET_42_0_2);
-  movq(xmm1, Address(rsp, 16));
-  movdl(eax, xmm1);
-  testl(eax, 1);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_43_0_2);
-
-  bind(L_2TAG_PACKET_41_0_2);
-  testl(ecx, INT_MIN);
-  jcc(Assembler::equal, L_2TAG_PACKET_22_0_2);
-  xorpd(xmm0, xmm0);
-
-  bind(L_2TAG_PACKET_44_0_2);
-  movl(eax, 16368);
-  xorpd(xmm1, xmm1);
-  pinsrw(xmm1, eax, 3);
-  divsd(xmm1, xmm0);
-  movdqu(xmm0, xmm1);
-  movl(Address(rsp, 0), 27);
-  jmp(L_2TAG_PACKET_17_0_2);
-
-  bind(L_2TAG_PACKET_12_0_2);
-  movq(xmm2, Address(rsp, 8));
-  movq(xmm6, Address(rsp, 16));
-  pextrw(eax, xmm2, 3);
-  pextrw(edx, xmm6, 3);
-  movl(ecx, 32752);
-  andl(ecx, edx);
-  cmpl(ecx, 32752);
-  jcc(Assembler::equal, L_2TAG_PACKET_45_0_2);
-  andl(eax, 32752);
-  subl(eax, 16368);
-  xorl(edx, eax);
-  testl(edx, 32768);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_46_0_2);
-
-  bind(L_2TAG_PACKET_47_0_2);
-  movl(eax, 32736);
-  pinsrw(xmm0, eax, 3);
-  shrl(tmp1, 16);
-  orl(eax, tmp1);
-  pinsrw(xmm1, eax, 3);
-  mulsd(xmm0, xmm1);
-
-  bind(L_2TAG_PACKET_14_0_2);
-  movl(Address(rsp, 0), 24);
-  jmp(L_2TAG_PACKET_17_0_2);
-
-  bind(L_2TAG_PACKET_46_0_2);
-  movl(eax, 16);
-  pinsrw(xmm0, eax, 3);
-  mulsd(xmm0, xmm0);
-  testl(tmp1, INT_MIN);
-  jcc(Assembler::equal, L_2TAG_PACKET_48_0_2);
-  mov64(tmp2, 0x8000000000000000);
-  movdq(xmm2, tmp2);
-  xorpd(xmm0, xmm2);
-
-  bind(L_2TAG_PACKET_48_0_2);
-  movl(Address(rsp, 0), 25);
-  jmp(L_2TAG_PACKET_17_0_2);
-
-  bind(L_2TAG_PACKET_13_0_2);
-  pextrw(ecx, xmm5, 3);
-  pextrw(edx, xmm4, 3);
-  movl(eax, -1);
-  andl(ecx, 32752);
-  subl(ecx, 16368);
-  andl(edx, 32752);
-  addl(edx, ecx);
-  movl(ecx, -31);
-  sarl(edx, 4);
-  subl(ecx, edx);
-  jcc(Assembler::lessEqual, L_2TAG_PACKET_49_0_2);
-  cmpl(ecx, 20);
-  jcc(Assembler::above, L_2TAG_PACKET_50_0_2);
-  shll(eax);
-
-  bind(L_2TAG_PACKET_49_0_2);
-  movdl(xmm0, eax);
-  psllq(xmm0, 32);
-  pand(xmm0, xmm5);
-  subsd(xmm5, xmm0);
-  addsd(xmm5, xmm1);
-  mulsd(xmm0, xmm4);
-  mulsd(xmm5, xmm4);
-  addsd(xmm0, xmm5);
-
-  bind(L_2TAG_PACKET_50_0_2);
-  jmp(L_2TAG_PACKET_48_0_2);
-
-  bind(L_2TAG_PACKET_2_0_2);
-  movw(ecx, Address(rsp, 22));
-  movl(edx, INT_MIN);
-  movdl(xmm1, rdx);
-  xorpd(xmm7, xmm7);
-  paddd(xmm0, xmm4);
-  movdl(edx, xmm0);
-  psllq(xmm0, 29);
-  paddq(xmm1, xmm3);
-  pand(xmm5, xmm1);
-  andl(ecx, 32752);
-  cmpl(ecx, 16560);
-  jcc(Assembler::less, L_2TAG_PACKET_3_0_2);
-  pand(xmm0, xmm6);
-  subsd(xmm3, xmm5);
-  addl(eax, 16351);
-  shrl(eax, 4);
-  subl(eax, 1022);
-  cvtsi2sdl(xmm7, eax);
-  mulpd(xmm5, xmm0);
-  lea(r11, ExternalAddress(L_tbl));
-  movq(xmm4, ExternalAddress(coeff_h));    //0x00000000UL, 0xbfd61a00UL, 0x00000000UL, 0xbf5dabe1UL
-  mulsd(xmm3, xmm0);
-  movq(xmm6, ExternalAddress(coeff_h));    //0x00000000UL, 0xbfd61a00UL, 0x00000000UL, 0xbf5dabe1UL
-  subsd(xmm5, xmm2);
-  movq(xmm1, ExternalAddress(8 + coeff_h));    //0x00000000UL, 0xbf5dabe1UL
-  pshufd(xmm2, xmm3, 68);
-  unpcklpd(xmm5, xmm3);
-  addsd(xmm3, xmm5);
-  movq(xmm0, ExternalAddress(8 + coeff_h));    //0x00000000UL, 0xbf5dabe1UL
-  andl(edx, 16760832);
-  shrl(edx, 10);
-  addpd(xmm7, Address(tmp4, edx, Address::times_1, -3648));
-  mulsd(xmm4, xmm5);
-  mulsd(xmm0, xmm5);
-  mulsd(xmm6, xmm2);
-  mulsd(xmm1, xmm2);
-  movdqu(xmm2, xmm5);
-  mulsd(xmm4, xmm5);
-  addsd(xmm5, xmm0);
-  movdqu(xmm0, xmm7);
-  addsd(xmm2, xmm3);
-  addsd(xmm7, xmm5);
-  mulsd(xmm6, xmm2);
-  subsd(xmm0, xmm7);
-  movdqu(xmm2, xmm7);
-  addsd(xmm7, xmm4);
-  addsd(xmm0, xmm5);
-  subsd(xmm2, xmm7);
-  addsd(xmm4, xmm2);
-  pshufd(xmm2, xmm5, 238);
-  movdqu(xmm5, xmm7);
-  addsd(xmm7, xmm2);
-  addsd(xmm4, xmm0);
-  movdqu(xmm0, ExternalAddress(coeff));    //0x6dc96112UL, 0xbf836578UL, 0xee241472UL, 0xbf9b0301UL
-  subsd(xmm5, xmm7);
-  addsd(xmm6, xmm4);
-  movdqu(xmm4, xmm7);
-  addsd(xmm5, xmm2);
-  addsd(xmm7, xmm1);
-  movdqu(xmm2, ExternalAddress(64 + coeff));    //0x486ececcUL, 0x3fc4635eUL, 0x161bb241UL, 0xbf5dabe1UL
-  subsd(xmm4, xmm7);
-  addsd(xmm6, xmm5);
-  addsd(xmm4, xmm1);
-  pshufd(xmm5, xmm7, 238);
-  movapd(xmm1, xmm7);
-  addsd(xmm7, xmm5);
-  subsd(xmm1, xmm7);
-  addsd(xmm1, xmm5);
-  movdqu(xmm5, ExternalAddress(80 + coeff));    //0x9f95985aUL, 0xbfb528dbUL, 0xf8b5787dUL, 0x3ef2531eUL
-  pshufd(xmm3, xmm3, 68);
-  addsd(xmm6, xmm4);
-  addsd(xmm6, xmm1);
-  movdqu(xmm1, ExternalAddress(32 + coeff));    //0x9f95985aUL, 0xbfb528dbUL, 0xb3841d2aUL, 0xbfd619b6UL
-  mulpd(xmm0, xmm3);
-  mulpd(xmm2, xmm3);
-  pshufd(xmm4, xmm3, 68);
-  mulpd(xmm3, xmm3);
-  addpd(xmm0, xmm1);
-  addpd(xmm5, xmm2);
-  mulsd(xmm4, xmm3);
-  movq(xmm2, ExternalAddress(HIGHMASK_LOG_X));    //0xf8000000UL, 0xffffffffUL, 0x00000000UL, 0xfffff800UL
-  mulpd(xmm3, xmm3);
-  movq(xmm1, Address(rsp, 16));
-  movw(ecx, Address(rsp, 22));
-  mulpd(xmm0, xmm4);
-  pextrw(eax, xmm7, 3);
-  mulpd(xmm5, xmm4);
-  mulpd(xmm0, xmm3);
-  movq(xmm4, ExternalAddress(8 + HIGHMASK_Y));    //0x00000000UL, 0xffffffffUL
-  pand(xmm2, xmm7);
-  addsd(xmm5, xmm6);
-  subsd(xmm7, xmm2);
-  addpd(xmm5, xmm0);
-  andl(eax, 32752);
-  subl(eax, 16368);
-  andl(ecx, 32752);
-  cmpl(ecx, 32752);
-  jcc(Assembler::equal, L_2TAG_PACKET_45_0_2);
-  addl(ecx, eax);
-  cmpl(ecx, 16576);
-  jcc(Assembler::aboveEqual, L_2TAG_PACKET_51_0_2);
-  pshufd(xmm0, xmm5, 238);
-  pand(xmm4, xmm1);
-  movdqu(xmm3, xmm1);
-  addsd(xmm5, xmm0);
-  subsd(xmm1, xmm4);
-  xorpd(xmm6, xmm6);
-  movl(edx, 17080);
-  pinsrw(xmm6, edx, 3);
-  addsd(xmm7, xmm5);
-  mulsd(xmm4, xmm2);
-  mulsd(xmm1, xmm2);
-  movdqu(xmm5, xmm6);
-  mulsd(xmm3, xmm7);
-  addsd(xmm6, xmm4);
-  addsd(xmm1, xmm3);
-  movdqu(xmm7, ExternalAddress(e_coeff));    //0xe78a6731UL, 0x3f55d87fUL, 0xd704a0c0UL, 0x3fac6b08UL
-  movdl(edx, xmm6);
-  subsd(xmm6, xmm5);
-  lea(tmp4, ExternalAddress(T_exp));
-  movdqu(xmm3, ExternalAddress(16 + e_coeff));    //0x6fba4e77UL, 0x3f83b2abUL, 0xff82c58fUL, 0x3fcebfbdUL
-  movq(xmm2, ExternalAddress(32 + e_coeff));    //0xfefa39efUL, 0x3fe62e42UL, 0x00000000UL, 0x00000000UL
-  subsd(xmm4, xmm6);
-  movl(ecx, edx);
-  andl(edx, 255);
-  addl(edx, edx);
-  movdqu(xmm5, Address(tmp4, edx, Address::times_8, 0));
-  addsd(xmm4, xmm1);
-  pextrw(edx, xmm6, 3);
-  shrl(ecx, 8);
-  movl(eax, ecx);
-  shrl(ecx, 1);
-  subl(eax, ecx);
-  shll(ecx, 20);
-  movdl(xmm6, ecx);
-  pshufd(xmm0, xmm4, 68);
-  pshufd(xmm1, xmm4, 68);
-  mulpd(xmm0, xmm0);
-  mulpd(xmm7, xmm1);
-  pshufd(xmm6, xmm6, 17);
-  mulsd(xmm2, xmm4);
-  andl(edx, 32767);
-  cmpl(edx, 16529);
-  jcc(Assembler::above, L_2TAG_PACKET_12_0_2);
-  mulsd(xmm0, xmm0);
-  paddd(xmm5, xmm6);
-  addpd(xmm3, xmm7);
-  mulsd(xmm2, xmm5);
-  pshufd(xmm6, xmm5, 238);
-  mulpd(xmm0, xmm3);
-  addsd(xmm2, xmm6);
-  pshufd(xmm3, xmm0, 238);
-  addl(eax, 1023);
-  shll(eax, 20);
-  orl(eax, tmp1);
-  movdl(xmm4, eax);
-  mulsd(xmm0, xmm5);
-  mulsd(xmm3, xmm5);
-  addsd(xmm0, xmm2);
-  psllq(xmm4, 32);
-  addsd(xmm0, xmm3);
-  movdqu(xmm1, xmm0);
-  addsd(xmm0, xmm5);
-  mulsd(xmm0, xmm4);
-  pextrw(eax, xmm0, 3);
-  andl(eax, 32752);
-  jcc(Assembler::equal, L_2TAG_PACKET_13_0_2);
-  cmpl(eax, 32752);
-  jcc(Assembler::equal, L_2TAG_PACKET_14_0_2);
-
-  bind(L_2TAG_PACKET_52_0_2);
-  jmp(B1_5);
-
-  bind(L_2TAG_PACKET_45_0_2);
-  movq(xmm0, Address(rsp, 8));
-  xorpd(xmm2, xmm2);
-  movl(eax, 49136);
-  pinsrw(xmm2, eax, 3);
-  addsd(xmm2, xmm0);
-  pextrw(eax, xmm2, 3);
-  cmpl(eax, 0);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_53_0_2);
-  xorpd(xmm0, xmm0);
-  movl(eax, 32760);
-  pinsrw(xmm0, eax, 3);
-  jmp(B1_5);
-
-  bind(L_2TAG_PACKET_53_0_2);
-  movq(xmm1, Address(rsp, 16));
-  movdl(edx, xmm1);
-  movdqu(xmm3, xmm1);
-  psrlq(xmm3, 20);
-  movdl(ecx, xmm3);
-  orl(ecx, edx);
-  jcc(Assembler::equal, L_2TAG_PACKET_54_0_2);
-  addsd(xmm1, xmm1);
-  movdqu(xmm0, xmm1);
-  jmp(B1_5);
-
-  bind(L_2TAG_PACKET_51_0_2);
-  pextrw(eax, xmm1, 3);
-  pextrw(ecx, xmm2, 3);
-  xorl(eax, ecx);
-  testl(eax, 32768);
-  jcc(Assembler::equal, L_2TAG_PACKET_47_0_2);
-  jmp(L_2TAG_PACKET_46_0_2);
-
-  bind(L_2TAG_PACKET_54_0_2);
-  pextrw(eax, xmm0, 3);
-  andl(eax, 32752);
-  pextrw(edx, xmm1, 3);
-  xorpd(xmm0, xmm0);
-  subl(eax, 16368);
-  xorl(eax, edx);
-  testl(eax, 32768);
-  jcc(Assembler::equal, L_2TAG_PACKET_55_0_2);
-  jmp(B1_5);
-
-  bind(L_2TAG_PACKET_55_0_2);
-  movl(edx, 32752);
-  pinsrw(xmm0, edx, 3);
-  jmp(B1_5);
-
-  bind(L_2TAG_PACKET_17_0_2);
-  movq(Address(rsp, 24), xmm0);
-
-  bind(B1_3);
-  movq(xmm0, Address(rsp, 24));
-
-  bind(L_2TAG_PACKET_56_0_2);
-
-  bind(B1_5);
-  addq(rsp, 40);
-}
-#endif // _LP64
-
-#ifndef _LP64
-
-ALIGNED_(16) juint _static_const_table_pow[] =
-{
-  0x00000000UL, 0xbfd61a00UL, 0x00000000UL, 0xbf5dabe1UL, 0xf8000000UL,
-  0xffffffffUL, 0x00000000UL, 0xfffff800UL, 0x00000000UL, 0x3ff00000UL,
-  0x00000000UL, 0x00000000UL, 0x20000000UL, 0x3feff00aUL, 0x96621f95UL,
-  0x3e5b1856UL, 0xe0000000UL, 0x3fefe019UL, 0xe5916f9eUL, 0xbe325278UL,
-  0x00000000UL, 0x3fefd02fUL, 0x859a1062UL, 0x3e595fb7UL, 0xc0000000UL,
-  0x3fefc049UL, 0xb245f18fUL, 0xbe529c38UL, 0xe0000000UL, 0x3fefb069UL,
-  0xad2880a7UL, 0xbe501230UL, 0x60000000UL, 0x3fefa08fUL, 0xc8e72420UL,
-  0x3e597bd1UL, 0x80000000UL, 0x3fef90baUL, 0xc30c4500UL, 0xbe5d6c75UL,
-  0xe0000000UL, 0x3fef80eaUL, 0x02c63f43UL, 0x3e2e1318UL, 0xc0000000UL,
-  0x3fef7120UL, 0xb3d4ccccUL, 0xbe44c52aUL, 0x00000000UL, 0x3fef615cUL,
-  0xdbd91397UL, 0xbe4e7d6cUL, 0xa0000000UL, 0x3fef519cUL, 0x65c5cd68UL,
-  0xbe522dc8UL, 0xa0000000UL, 0x3fef41e2UL, 0x46d1306cUL, 0xbe5a840eUL,
-  0xe0000000UL, 0x3fef322dUL, 0xd2980e94UL, 0x3e5071afUL, 0xa0000000UL,
-  0x3fef227eUL, 0x773abadeUL, 0xbe5891e5UL, 0xa0000000UL, 0x3fef12d4UL,
-  0xdc6bf46bUL, 0xbe5cccbeUL, 0xe0000000UL, 0x3fef032fUL, 0xbc7247faUL,
-  0xbe2bab83UL, 0x80000000UL, 0x3feef390UL, 0xbcaa1e46UL, 0xbe53bb3bUL,
-  0x60000000UL, 0x3feee3f6UL, 0x5f6c682dUL, 0xbe54c619UL, 0x80000000UL,
-  0x3feed461UL, 0x5141e368UL, 0xbe4b6d86UL, 0xe0000000UL, 0x3feec4d1UL,
-  0xec678f76UL, 0xbe369af6UL, 0x80000000UL, 0x3feeb547UL, 0x41301f55UL,
-  0xbe2d4312UL, 0x60000000UL, 0x3feea5c2UL, 0x676da6bdUL, 0xbe4d8dd0UL,
-  0x60000000UL, 0x3fee9642UL, 0x57a891c4UL, 0x3e51f991UL, 0xa0000000UL,
-  0x3fee86c7UL, 0xe4eb491eUL, 0x3e579bf9UL, 0x20000000UL, 0x3fee7752UL,
-  0xfddc4a2cUL, 0xbe3356e6UL, 0xc0000000UL, 0x3fee67e1UL, 0xd75b5bf1UL,
-  0xbe449531UL, 0x80000000UL, 0x3fee5876UL, 0xbd423b8eUL, 0x3df54fe4UL,
-  0x60000000UL, 0x3fee4910UL, 0x330e51b9UL, 0x3e54289cUL, 0x80000000UL,
-  0x3fee39afUL, 0x8651a95fUL, 0xbe55aad6UL, 0xa0000000UL, 0x3fee2a53UL,
-  0x5e98c708UL, 0xbe2fc4a9UL, 0xe0000000UL, 0x3fee1afcUL, 0x0989328dUL,
-  0x3e23958cUL, 0x40000000UL, 0x3fee0babUL, 0xee642abdUL, 0xbe425dd8UL,
-  0xa0000000UL, 0x3fedfc5eUL, 0xc394d236UL, 0x3e526362UL, 0x20000000UL,
-  0x3feded17UL, 0xe104aa8eUL, 0x3e4ce247UL, 0xc0000000UL, 0x3fedddd4UL,
-  0x265a9be4UL, 0xbe5bb77aUL, 0x40000000UL, 0x3fedce97UL, 0x0ecac52fUL,
-  0x3e4a7cb1UL, 0xe0000000UL, 0x3fedbf5eUL, 0x124cb3b8UL, 0x3e257024UL,
-  0x80000000UL, 0x3fedb02bUL, 0xe6d4febeUL, 0xbe2033eeUL, 0x20000000UL,
-  0x3feda0fdUL, 0x39cca00eUL, 0xbe3ddabcUL, 0xc0000000UL, 0x3fed91d3UL,
-  0xef8a552aUL, 0xbe543390UL, 0x40000000UL, 0x3fed82afUL, 0xb8e85204UL,
-  0x3e513850UL, 0xe0000000UL, 0x3fed738fUL, 0x3d59fe08UL, 0xbe5db728UL,
-  0x40000000UL, 0x3fed6475UL, 0x3aa7ead1UL, 0x3e58804bUL, 0xc0000000UL,
-  0x3fed555fUL, 0xf8a35ba9UL, 0xbe5298b0UL, 0x00000000UL, 0x3fed464fUL,
-  0x9a88dd15UL, 0x3e5a8cdbUL, 0x40000000UL, 0x3fed3743UL, 0xb0b0a190UL,
-  0x3e598635UL, 0x80000000UL, 0x3fed283cUL, 0xe2113295UL, 0xbe5c1119UL,
-  0x80000000UL, 0x3fed193aUL, 0xafbf1728UL, 0xbe492e9cUL, 0x60000000UL,
-  0x3fed0a3dUL, 0xe4a4ccf3UL, 0x3e19b90eUL, 0x20000000UL, 0x3fecfb45UL,
-  0xba3cbeb8UL, 0x3e406b50UL, 0xc0000000UL, 0x3fecec51UL, 0x110f7dddUL,
-  0x3e0d6806UL, 0x40000000UL, 0x3fecdd63UL, 0x7dd7d508UL, 0xbe5a8943UL,
-  0x80000000UL, 0x3fecce79UL, 0x9b60f271UL, 0xbe50676aUL, 0x80000000UL,
-  0x3fecbf94UL, 0x0b9ad660UL, 0x3e59174fUL, 0x60000000UL, 0x3fecb0b4UL,
-  0x00823d9cUL, 0x3e5bbf72UL, 0x20000000UL, 0x3feca1d9UL, 0x38a6ec89UL,
-  0xbe4d38f9UL, 0x80000000UL, 0x3fec9302UL, 0x3a0b7d8eUL, 0x3e53dbfdUL,
-  0xc0000000UL, 0x3fec8430UL, 0xc6826b34UL, 0xbe27c5c9UL, 0xc0000000UL,
-  0x3fec7563UL, 0x0c706381UL, 0xbe593653UL, 0x60000000UL, 0x3fec669bUL,
-  0x7df34ec7UL, 0x3e461ab5UL, 0xe0000000UL, 0x3fec57d7UL, 0x40e5e7e8UL,
-  0xbe5c3daeUL, 0x00000000UL, 0x3fec4919UL, 0x5602770fUL, 0xbe55219dUL,
-  0xc0000000UL, 0x3fec3a5eUL, 0xec7911ebUL, 0x3e5a5d25UL, 0x60000000UL,
-  0x3fec2ba9UL, 0xb39ea225UL, 0xbe53c00bUL, 0x80000000UL, 0x3fec1cf8UL,
-  0x967a212eUL, 0x3e5a8ddfUL, 0x60000000UL, 0x3fec0e4cUL, 0x580798bdUL,
-  0x3e5f53abUL, 0x00000000UL, 0x3febffa5UL, 0xb8282df6UL, 0xbe46b874UL,
-  0x20000000UL, 0x3febf102UL, 0xe33a6729UL, 0x3e54963fUL, 0x00000000UL,
-  0x3febe264UL, 0x3b53e88aUL, 0xbe3adce1UL, 0x60000000UL, 0x3febd3caUL,
-  0xc2585084UL, 0x3e5cde9fUL, 0x80000000UL, 0x3febc535UL, 0xa335c5eeUL,
-  0xbe39fd9cUL, 0x20000000UL, 0x3febb6a5UL, 0x7325b04dUL, 0x3e42ba15UL,
-  0x60000000UL, 0x3feba819UL, 0x1564540fUL, 0x3e3a9f35UL, 0x40000000UL,
-  0x3feb9992UL, 0x83fff592UL, 0xbe5465ceUL, 0xa0000000UL, 0x3feb8b0fUL,
-  0xb9da63d3UL, 0xbe4b1a0aUL, 0x80000000UL, 0x3feb7c91UL, 0x6d6f1ea4UL,
-  0x3e557657UL, 0x00000000UL, 0x3feb6e18UL, 0x5e80a1bfUL, 0x3e4ddbb6UL,
-  0x00000000UL, 0x3feb5fa3UL, 0x1c9eacb5UL, 0x3e592877UL, 0xa0000000UL,
-  0x3feb5132UL, 0x6d40beb3UL, 0xbe51858cUL, 0xa0000000UL, 0x3feb42c6UL,
-  0xd740c67bUL, 0x3e427ad2UL, 0x40000000UL, 0x3feb345fUL, 0xa3e0cceeUL,
-  0xbe5c2fc4UL, 0x40000000UL, 0x3feb25fcUL, 0x8e752b50UL, 0xbe3da3c2UL,
-  0xc0000000UL, 0x3feb179dUL, 0xa892e7deUL, 0x3e1fb481UL, 0xc0000000UL,
-  0x3feb0943UL, 0x21ed71e9UL, 0xbe365206UL, 0x20000000UL, 0x3feafaeeUL,
-  0x0e1380a3UL, 0x3e5c5b7bUL, 0x20000000UL, 0x3feaec9dUL, 0x3c3d640eUL,
-  0xbe5dbbd0UL, 0x60000000UL, 0x3feade50UL, 0x8f97a715UL, 0x3e3a8ec5UL,
-  0x20000000UL, 0x3fead008UL, 0x23ab2839UL, 0x3e2fe98aUL, 0x40000000UL,
-  0x3feac1c4UL, 0xf4bbd50fUL, 0x3e54d8f6UL, 0xe0000000UL, 0x3feab384UL,
-  0x14757c4dUL, 0xbe48774cUL, 0xc0000000UL, 0x3feaa549UL, 0x7c7b0eeaUL,
-  0x3e5b51bbUL, 0x20000000UL, 0x3fea9713UL, 0xf56f7013UL, 0x3e386200UL,
-  0xe0000000UL, 0x3fea88e0UL, 0xbe428ebeUL, 0xbe514af5UL, 0xe0000000UL,
-  0x3fea7ab2UL, 0x8d0e4496UL, 0x3e4f9165UL, 0x60000000UL, 0x3fea6c89UL,
-  0xdbacc5d5UL, 0xbe5c063bUL, 0x20000000UL, 0x3fea5e64UL, 0x3f19d970UL,
-  0xbe5a0c8cUL, 0x20000000UL, 0x3fea5043UL, 0x09ea3e6bUL, 0x3e5065dcUL,
-  0x80000000UL, 0x3fea4226UL, 0x78df246cUL, 0x3e5e05f6UL, 0x40000000UL,
-  0x3fea340eUL, 0x4057d4a0UL, 0x3e431b2bUL, 0x40000000UL, 0x3fea25faUL,
-  0x82867bb5UL, 0x3e4b76beUL, 0xa0000000UL, 0x3fea17eaUL, 0x9436f40aUL,
-  0xbe5aad39UL, 0x20000000UL, 0x3fea09dfUL, 0x4b5253b3UL, 0x3e46380bUL,
-  0x00000000UL, 0x3fe9fbd8UL, 0x8fc52466UL, 0xbe386f9bUL, 0x20000000UL,
-  0x3fe9edd5UL, 0x22d3f344UL, 0xbe538347UL, 0x60000000UL, 0x3fe9dfd6UL,
-  0x1ac33522UL, 0x3e5dbc53UL, 0x00000000UL, 0x3fe9d1dcUL, 0xeabdff1dUL,
-  0x3e40fc0cUL, 0xe0000000UL, 0x3fe9c3e5UL, 0xafd30e73UL, 0xbe585e63UL,
-  0xe0000000UL, 0x3fe9b5f3UL, 0xa52f226aUL, 0xbe43e8f9UL, 0x20000000UL,
-  0x3fe9a806UL, 0xecb8698dUL, 0xbe515b36UL, 0x80000000UL, 0x3fe99a1cUL,
-  0xf2b4e89dUL, 0x3e48b62bUL, 0x20000000UL, 0x3fe98c37UL, 0x7c9a88fbUL,
-  0x3e44414cUL, 0x00000000UL, 0x3fe97e56UL, 0xda015741UL, 0xbe5d13baUL,
-  0xe0000000UL, 0x3fe97078UL, 0x5fdace06UL, 0x3e51b947UL, 0x00000000UL,
-  0x3fe962a0UL, 0x956ca094UL, 0x3e518785UL, 0x40000000UL, 0x3fe954cbUL,
-  0x01164c1dUL, 0x3e5d5b57UL, 0xc0000000UL, 0x3fe946faUL, 0xe63b3767UL,
-  0xbe4f84e7UL, 0x40000000UL, 0x3fe9392eUL, 0xe57cc2a9UL, 0x3e34eda3UL,
-  0xe0000000UL, 0x3fe92b65UL, 0x8c75b544UL, 0x3e5766a0UL, 0xc0000000UL,
-  0x3fe91da1UL, 0x37d1d087UL, 0xbe5e2ab1UL, 0x80000000UL, 0x3fe90fe1UL,
-  0xa953dc20UL, 0x3e5fa1f3UL, 0x80000000UL, 0x3fe90225UL, 0xdbd3f369UL,
-  0x3e47d6dbUL, 0xa0000000UL, 0x3fe8f46dUL, 0x1c9be989UL, 0xbe5e2b0aUL,
-  0xa0000000UL, 0x3fe8e6b9UL, 0x3c93d76aUL, 0x3e5c8618UL, 0xe0000000UL,
-  0x3fe8d909UL, 0x2182fc9aUL, 0xbe41aa9eUL, 0x20000000UL, 0x3fe8cb5eUL,
-  0xe6b3539dUL, 0xbe530d19UL, 0x60000000UL, 0x3fe8bdb6UL, 0x49e58cc3UL,
-  0xbe3bb374UL, 0xa0000000UL, 0x3fe8b012UL, 0xa7cfeb8fUL, 0x3e56c412UL,
-  0x00000000UL, 0x3fe8a273UL, 0x8d52bc19UL, 0x3e1429b8UL, 0x60000000UL,
-  0x3fe894d7UL, 0x4dc32c6cUL, 0xbe48604cUL, 0xc0000000UL, 0x3fe8873fUL,
-  0x0c868e56UL, 0xbe564ee5UL, 0x00000000UL, 0x3fe879acUL, 0x56aee828UL,
-  0x3e5e2fd8UL, 0x60000000UL, 0x3fe86c1cUL, 0x7ceab8ecUL, 0x3e493365UL,
-  0xc0000000UL, 0x3fe85e90UL, 0x78d4dadcUL, 0xbe4f7f25UL, 0x00000000UL,
-  0x3fe85109UL, 0x0ccd8280UL, 0x3e31e7a2UL, 0x40000000UL, 0x3fe84385UL,
-  0x34ba4e15UL, 0x3e328077UL, 0x80000000UL, 0x3fe83605UL, 0xa670975aUL,
-  0xbe53eee5UL, 0xa0000000UL, 0x3fe82889UL, 0xf61b77b2UL, 0xbe43a20aUL,
-  0xa0000000UL, 0x3fe81b11UL, 0x13e6643bUL, 0x3e5e5fe5UL, 0xc0000000UL,
-  0x3fe80d9dUL, 0x82cc94e8UL, 0xbe5ff1f9UL, 0xa0000000UL, 0x3fe8002dUL,
-  0x8a0c9c5dUL, 0xbe42b0e7UL, 0x60000000UL, 0x3fe7f2c1UL, 0x22a16f01UL,
-  0x3e5d9ea0UL, 0x20000000UL, 0x3fe7e559UL, 0xc38cd451UL, 0x3e506963UL,
-  0xc0000000UL, 0x3fe7d7f4UL, 0x9902bc71UL, 0x3e4503d7UL, 0x40000000UL,
-  0x3fe7ca94UL, 0xdef2a3c0UL, 0x3e3d98edUL, 0xa0000000UL, 0x3fe7bd37UL,
-  0xed49abb0UL, 0x3e24c1ffUL, 0xe0000000UL, 0x3fe7afdeUL, 0xe3b0be70UL,
-  0xbe40c467UL, 0x00000000UL, 0x3fe7a28aUL, 0xaf9f193cUL, 0xbe5dff6cUL,
-  0xe0000000UL, 0x3fe79538UL, 0xb74cf6b6UL, 0xbe258ed0UL, 0xa0000000UL,
-  0x3fe787ebUL, 0x1d9127c7UL, 0x3e345fb0UL, 0x40000000UL, 0x3fe77aa2UL,
-  0x1028c21dUL, 0xbe4619bdUL, 0xa0000000UL, 0x3fe76d5cUL, 0x7cb0b5e4UL,
-  0x3e40f1a2UL, 0xe0000000UL, 0x3fe7601aUL, 0x2b1bc4adUL, 0xbe32e8bbUL,
-  0xe0000000UL, 0x3fe752dcUL, 0x6839f64eUL, 0x3e41f57bUL, 0xc0000000UL,
-  0x3fe745a2UL, 0xc4121f7eUL, 0xbe52c40aUL, 0x60000000UL, 0x3fe7386cUL,
-  0xd6852d72UL, 0xbe5c4e6bUL, 0xc0000000UL, 0x3fe72b39UL, 0x91d690f7UL,
-  0xbe57f88fUL, 0xe0000000UL, 0x3fe71e0aUL, 0x627a2159UL, 0xbe4425d5UL,
-  0xc0000000UL, 0x3fe710dfUL, 0x50a54033UL, 0x3e422b7eUL, 0x60000000UL,
-  0x3fe703b8UL, 0x3b0b5f91UL, 0x3e5d3857UL, 0xe0000000UL, 0x3fe6f694UL,
-  0x84d628a2UL, 0xbe51f090UL, 0x00000000UL, 0x3fe6e975UL, 0x306d8894UL,
-  0xbe414d83UL, 0xe0000000UL, 0x3fe6dc58UL, 0x30bf24aaUL, 0xbe4650caUL,
-  0x80000000UL, 0x3fe6cf40UL, 0xd4628d69UL, 0xbe5db007UL, 0xc0000000UL,
-  0x3fe6c22bUL, 0xa2aae57bUL, 0xbe31d279UL, 0xc0000000UL, 0x3fe6b51aUL,
-  0x860edf7eUL, 0xbe2d4c4aUL, 0x80000000UL, 0x3fe6a80dUL, 0xf3559341UL,
-  0xbe5f7e98UL, 0xe0000000UL, 0x3fe69b03UL, 0xa885899eUL, 0xbe5c2011UL,
-  0xe0000000UL, 0x3fe68dfdUL, 0x2bdc6d37UL, 0x3e224a82UL, 0xa0000000UL,
-  0x3fe680fbUL, 0xc12ad1b9UL, 0xbe40cf56UL, 0x00000000UL, 0x3fe673fdUL,
-  0x1bcdf659UL, 0xbdf52f2dUL, 0x00000000UL, 0x3fe66702UL, 0x5df10408UL,
-  0x3e5663e0UL, 0xc0000000UL, 0x3fe65a0aUL, 0xa4070568UL, 0xbe40b12fUL,
-  0x00000000UL, 0x3fe64d17UL, 0x71c54c47UL, 0x3e5f5e8bUL, 0x00000000UL,
-  0x3fe64027UL, 0xbd4b7e83UL, 0x3e42ead6UL, 0xa0000000UL, 0x3fe6333aUL,
-  0x61598bd2UL, 0xbe4c48d4UL, 0xc0000000UL, 0x3fe62651UL, 0x6f538d61UL,
-  0x3e548401UL, 0xa0000000UL, 0x3fe6196cUL, 0x14344120UL, 0xbe529af6UL,
-  0x00000000UL, 0x3fe60c8bUL, 0x5982c587UL, 0xbe3e1e4fUL, 0x00000000UL,
-  0x3fe5ffadUL, 0xfe51d4eaUL, 0xbe4c897aUL, 0x80000000UL, 0x3fe5f2d2UL,
-  0xfd46ebe1UL, 0x3e552e00UL, 0xa0000000UL, 0x3fe5e5fbUL, 0xa4695699UL,
-  0x3e5ed471UL, 0x60000000UL, 0x3fe5d928UL, 0x80d118aeUL, 0x3e456b61UL,
-  0xa0000000UL, 0x3fe5cc58UL, 0x304c330bUL, 0x3e54dc29UL, 0x80000000UL,
-  0x3fe5bf8cUL, 0x0af2dedfUL, 0xbe3aa9bdUL, 0xe0000000UL, 0x3fe5b2c3UL,
-  0x15fc9258UL, 0xbe479a37UL, 0xc0000000UL, 0x3fe5a5feUL, 0x9292c7eaUL,
-  0x3e188650UL, 0x20000000UL, 0x3fe5993dUL, 0x33b4d380UL, 0x3e5d6d93UL,
-  0x20000000UL, 0x3fe58c7fUL, 0x02fd16c7UL, 0x3e2fe961UL, 0xa0000000UL,
-  0x3fe57fc4UL, 0x4a05edb6UL, 0xbe4d55b4UL, 0xa0000000UL, 0x3fe5730dUL,
-  0x3d443abbUL, 0xbe5e6954UL, 0x00000000UL, 0x3fe5665aUL, 0x024acfeaUL,
-  0x3e50e61bUL, 0x00000000UL, 0x3fe559aaUL, 0xcc9edd09UL, 0xbe325403UL,
-  0x60000000UL, 0x3fe54cfdUL, 0x1fe26950UL, 0x3e5d500eUL, 0x60000000UL,
-  0x3fe54054UL, 0x6c5ae164UL, 0xbe4a79b4UL, 0xc0000000UL, 0x3fe533aeUL,
-  0x154b0287UL, 0xbe401571UL, 0xa0000000UL, 0x3fe5270cUL, 0x0673f401UL,
-  0xbe56e56bUL, 0xe0000000UL, 0x3fe51a6dUL, 0x751b639cUL, 0x3e235269UL,
-  0xa0000000UL, 0x3fe50dd2UL, 0x7c7b2bedUL, 0x3ddec887UL, 0xc0000000UL,
-  0x3fe5013aUL, 0xafab4e17UL, 0x3e5e7575UL, 0x60000000UL, 0x3fe4f4a6UL,
-  0x2e308668UL, 0x3e59aed6UL, 0x80000000UL, 0x3fe4e815UL, 0xf33e2a76UL,
-  0xbe51f184UL, 0xe0000000UL, 0x3fe4db87UL, 0x839f3e3eUL, 0x3e57db01UL,
-  0xc0000000UL, 0x3fe4cefdUL, 0xa9eda7bbUL, 0x3e535e0fUL, 0x00000000UL,
-  0x3fe4c277UL, 0x2a8f66a5UL, 0x3e5ce451UL, 0xc0000000UL, 0x3fe4b5f3UL,
-  0x05192456UL, 0xbe4e8518UL, 0xc0000000UL, 0x3fe4a973UL, 0x4aa7cd1dUL,
-  0x3e46784aUL, 0x40000000UL, 0x3fe49cf7UL, 0x8e23025eUL, 0xbe5749f2UL,
-  0x00000000UL, 0x3fe4907eUL, 0x18d30215UL, 0x3e360f39UL, 0x20000000UL,
-  0x3fe48408UL, 0x63dcf2f3UL, 0x3e5e00feUL, 0xc0000000UL, 0x3fe47795UL,
-  0x46182d09UL, 0xbe5173d9UL, 0xa0000000UL, 0x3fe46b26UL, 0x8f0e62aaUL,
-  0xbe48f281UL, 0xe0000000UL, 0x3fe45ebaUL, 0x5775c40cUL, 0xbe56aad4UL,
-  0x60000000UL, 0x3fe45252UL, 0x0fe25f69UL, 0x3e48bd71UL, 0x40000000UL,
-  0x3fe445edUL, 0xe9989ec5UL, 0x3e590d97UL, 0x80000000UL, 0x3fe4398bUL,
-  0xb3d9ffe3UL, 0x3e479dbcUL, 0x20000000UL, 0x3fe42d2dUL, 0x388e4d2eUL,
-  0xbe5eed80UL, 0xe0000000UL, 0x3fe420d1UL, 0x6f797c18UL, 0x3e554b4cUL,
-  0x20000000UL, 0x3fe4147aUL, 0x31048bb4UL, 0xbe5b1112UL, 0x80000000UL,
-  0x3fe40825UL, 0x2efba4f9UL, 0x3e48ebc7UL, 0x40000000UL, 0x3fe3fbd4UL,
-  0x50201119UL, 0x3e40b701UL, 0x40000000UL, 0x3fe3ef86UL, 0x0a4db32cUL,
-  0x3e551de8UL, 0xa0000000UL, 0x3fe3e33bUL, 0x0c9c148bUL, 0xbe50c1f6UL,
-  0x20000000UL, 0x3fe3d6f4UL, 0xc9129447UL, 0x3e533fa0UL, 0x00000000UL,
-  0x3fe3cab0UL, 0xaae5b5a0UL, 0xbe22b68eUL, 0x20000000UL, 0x3fe3be6fUL,
-  0x02305e8aUL, 0xbe54fc08UL, 0x60000000UL, 0x3fe3b231UL, 0x7f908258UL,
-  0x3e57dc05UL, 0x00000000UL, 0x3fe3a5f7UL, 0x1a09af78UL, 0x3e08038bUL,
-  0xe0000000UL, 0x3fe399bfUL, 0x490643c1UL, 0xbe5dbe42UL, 0xe0000000UL,
-  0x3fe38d8bUL, 0x5e8ad724UL, 0xbe3c2b72UL, 0x20000000UL, 0x3fe3815bUL,
-  0xc67196b6UL, 0x3e1713cfUL, 0xa0000000UL, 0x3fe3752dUL, 0x6182e429UL,
-  0xbe3ec14cUL, 0x40000000UL, 0x3fe36903UL, 0xab6eb1aeUL, 0x3e5a2cc5UL,
-  0x40000000UL, 0x3fe35cdcUL, 0xfe5dc064UL, 0xbe5c5878UL, 0x40000000UL,
-  0x3fe350b8UL, 0x0ba6b9e4UL, 0x3e51619bUL, 0x80000000UL, 0x3fe34497UL,
-  0x857761aaUL, 0x3e5fff53UL, 0x00000000UL, 0x3fe3387aUL, 0xf872d68cUL,
-  0x3e484f4dUL, 0xa0000000UL, 0x3fe32c5fUL, 0x087e97c2UL, 0x3e52842eUL,
-  0x80000000UL, 0x3fe32048UL, 0x73d6d0c0UL, 0xbe503edfUL, 0x80000000UL,
-  0x3fe31434UL, 0x0c1456a1UL, 0xbe5f72adUL, 0xa0000000UL, 0x3fe30823UL,
-  0x83a1a4d5UL, 0xbe5e65ccUL, 0xe0000000UL, 0x3fe2fc15UL, 0x855a7390UL,
-  0xbe506438UL, 0x40000000UL, 0x3fe2f00bUL, 0xa2898287UL, 0x3e3d22a2UL,
-  0xe0000000UL, 0x3fe2e403UL, 0x8b56f66fUL, 0xbe5aa5fdUL, 0x80000000UL,
-  0x3fe2d7ffUL, 0x52db119aUL, 0x3e3a2e3dUL, 0x60000000UL, 0x3fe2cbfeUL,
-  0xe2ddd4c0UL, 0xbe586469UL, 0x40000000UL, 0x3fe2c000UL, 0x6b01bf10UL,
-  0x3e352b9dUL, 0x40000000UL, 0x3fe2b405UL, 0xb07a1cdfUL, 0x3e5c5cdaUL,
-  0x80000000UL, 0x3fe2a80dUL, 0xc7b5f868UL, 0xbe5668b3UL, 0xc0000000UL,
-  0x3fe29c18UL, 0x185edf62UL, 0xbe563d66UL, 0x00000000UL, 0x3fe29027UL,
-  0xf729e1ccUL, 0x3e59a9a0UL, 0x80000000UL, 0x3fe28438UL, 0x6433c727UL,
-  0xbe43cc89UL, 0x00000000UL, 0x3fe2784dUL, 0x41782631UL, 0xbe30750cUL,
-  0xa0000000UL, 0x3fe26c64UL, 0x914911b7UL, 0xbe58290eUL, 0x40000000UL,
-  0x3fe2607fUL, 0x3dcc73e1UL, 0xbe4269cdUL, 0x00000000UL, 0x3fe2549dUL,
-  0x2751bf70UL, 0xbe5a6998UL, 0xc0000000UL, 0x3fe248bdUL, 0x4248b9fbUL,
-  0xbe4ddb00UL, 0x80000000UL, 0x3fe23ce1UL, 0xf35cf82fUL, 0x3e561b71UL,
-  0x60000000UL, 0x3fe23108UL, 0x8e481a2dUL, 0x3e518fb9UL, 0x60000000UL,
-  0x3fe22532UL, 0x5ab96edcUL, 0xbe5fafc5UL, 0x40000000UL, 0x3fe2195fUL,
-  0x80943911UL, 0xbe07f819UL, 0x40000000UL, 0x3fe20d8fUL, 0x386f2d6cUL,
-  0xbe54ba8bUL, 0x40000000UL, 0x3fe201c2UL, 0xf29664acUL, 0xbe5eb815UL,
-  0x20000000UL, 0x3fe1f5f8UL, 0x64f03390UL, 0x3e5e320cUL, 0x20000000UL,
-  0x3fe1ea31UL, 0x747ff696UL, 0x3e5ef0a5UL, 0x40000000UL, 0x3fe1de6dUL,
-  0x3e9ceb51UL, 0xbe5f8d27UL, 0x20000000UL, 0x3fe1d2acUL, 0x4ae0b55eUL,
-  0x3e5faa21UL, 0x20000000UL, 0x3fe1c6eeUL, 0x28569a5eUL, 0x3e598a4fUL,
-  0x20000000UL, 0x3fe1bb33UL, 0x54b33e07UL, 0x3e46130aUL, 0x20000000UL,
-  0x3fe1af7bUL, 0x024f1078UL, 0xbe4dbf93UL, 0x00000000UL, 0x3fe1a3c6UL,
-  0xb0783bfaUL, 0x3e419248UL, 0xe0000000UL, 0x3fe19813UL, 0x2f02b836UL,
-  0x3e4e02b7UL, 0xc0000000UL, 0x3fe18c64UL, 0x28dec9d4UL, 0x3e09064fUL,
-  0x80000000UL, 0x3fe180b8UL, 0x45cbf406UL, 0x3e5b1f46UL, 0x40000000UL,
-  0x3fe1750fUL, 0x03d9964cUL, 0x3e5b0a79UL, 0x00000000UL, 0x3fe16969UL,
-  0x8b5b882bUL, 0xbe238086UL, 0xa0000000UL, 0x3fe15dc5UL, 0x73bad6f8UL,
-  0xbdf1fca4UL, 0x20000000UL, 0x3fe15225UL, 0x5385769cUL, 0x3e5e8d76UL,
-  0xa0000000UL, 0x3fe14687UL, 0x1676dc6bUL, 0x3e571d08UL, 0x20000000UL,
-  0x3fe13aedUL, 0xa8c41c7fUL, 0xbe598a25UL, 0x60000000UL, 0x3fe12f55UL,
-  0xc4e1aaf0UL, 0x3e435277UL, 0xa0000000UL, 0x3fe123c0UL, 0x403638e1UL,
-  0xbe21aa7cUL, 0xc0000000UL, 0x3fe1182eUL, 0x557a092bUL, 0xbdd0116bUL,
-  0xc0000000UL, 0x3fe10c9fUL, 0x7d779f66UL, 0x3e4a61baUL, 0xc0000000UL,
-  0x3fe10113UL, 0x2b09c645UL, 0xbe5d586eUL, 0x20000000UL, 0x3fe0ea04UL,
-  0xea2cad46UL, 0x3e5aa97cUL, 0x20000000UL, 0x3fe0d300UL, 0x23190e54UL,
-  0x3e50f1a7UL, 0xa0000000UL, 0x3fe0bc07UL, 0x1379a5a6UL, 0xbe51619dUL,
-  0x60000000UL, 0x3fe0a51aUL, 0x926a3d4aUL, 0x3e5cf019UL, 0xa0000000UL,
-  0x3fe08e38UL, 0xa8c24358UL, 0x3e35241eUL, 0x20000000UL, 0x3fe07762UL,
-  0x24317e7aUL, 0x3e512cfaUL, 0x00000000UL, 0x3fe06097UL, 0xfd9cf274UL,
-  0xbe55bef3UL, 0x00000000UL, 0x3fe049d7UL, 0x3689b49dUL, 0xbe36d26dUL,
-  0x40000000UL, 0x3fe03322UL, 0xf72ef6c4UL, 0xbe54cd08UL, 0xa0000000UL,
-  0x3fe01c78UL, 0x23702d2dUL, 0xbe5900bfUL, 0x00000000UL, 0x3fe005daUL,
-  0x3f59c14cUL, 0x3e57d80bUL, 0x40000000UL, 0x3fdfde8dUL, 0xad67766dUL,
-  0xbe57fad4UL, 0x40000000UL, 0x3fdfb17cUL, 0x644f4ae7UL, 0x3e1ee43bUL,
-  0x40000000UL, 0x3fdf8481UL, 0x903234d2UL, 0x3e501a86UL, 0x40000000UL,
-  0x3fdf579cUL, 0xafe9e509UL, 0xbe267c3eUL, 0x00000000UL, 0x3fdf2acdUL,
-  0xb7dfda0bUL, 0xbe48149bUL, 0x40000000UL, 0x3fdefe13UL, 0x3b94305eUL,
-  0x3e5f4ea7UL, 0x80000000UL, 0x3fded16fUL, 0x5d95da61UL, 0xbe55c198UL,
-  0x00000000UL, 0x3fdea4e1UL, 0x406960c9UL, 0xbdd99a19UL, 0x00000000UL,
-  0x3fde7868UL, 0xd22f3539UL, 0x3e470c78UL, 0x80000000UL, 0x3fde4c04UL,
-  0x83eec535UL, 0xbe3e1232UL, 0x40000000UL, 0x3fde1fb6UL, 0x3dfbffcbUL,
-  0xbe4b7d71UL, 0x40000000UL, 0x3fddf37dUL, 0x7e1be4e0UL, 0xbe5b8f8fUL,
-  0x40000000UL, 0x3fddc759UL, 0x46dae887UL, 0xbe350458UL, 0x80000000UL,
-  0x3fdd9b4aUL, 0xed6ecc49UL, 0xbe5f0045UL, 0x80000000UL, 0x3fdd6f50UL,
-  0x2e9e883cUL, 0x3e2915daUL, 0x80000000UL, 0x3fdd436bUL, 0xf0bccb32UL,
-  0x3e4a68c9UL, 0x80000000UL, 0x3fdd179bUL, 0x9bbfc779UL, 0xbe54a26aUL,
-  0x00000000UL, 0x3fdcebe0UL, 0x7cea33abUL, 0x3e43c6b7UL, 0x40000000UL,
-  0x3fdcc039UL, 0xe740fd06UL, 0x3e5526c2UL, 0x40000000UL, 0x3fdc94a7UL,
-  0x9eadeb1aUL, 0xbe396d8dUL, 0xc0000000UL, 0x3fdc6929UL, 0xf0a8f95aUL,
-  0xbe5c0ab2UL, 0x80000000UL, 0x3fdc3dc0UL, 0x6ee2693bUL, 0x3e0992e6UL,
-  0xc0000000UL, 0x3fdc126bUL, 0x5ac6b581UL, 0xbe2834b6UL, 0x40000000UL,
-  0x3fdbe72bUL, 0x8cc226ffUL, 0x3e3596a6UL, 0x00000000UL, 0x3fdbbbffUL,
-  0xf92a74bbUL, 0x3e3c5813UL, 0x00000000UL, 0x3fdb90e7UL, 0x479664c0UL,
-  0xbe50d644UL, 0x00000000UL, 0x3fdb65e3UL, 0x5004975bUL, 0xbe55258fUL,
-  0x00000000UL, 0x3fdb3af3UL, 0xe4b23194UL, 0xbe588407UL, 0xc0000000UL,
-  0x3fdb1016UL, 0xe65d4d0aUL, 0x3e527c26UL, 0x80000000UL, 0x3fdae54eUL,
-  0x814fddd6UL, 0x3e5962a2UL, 0x40000000UL, 0x3fdaba9aUL, 0xe19d0913UL,
-  0xbe562f4eUL, 0x80000000UL, 0x3fda8ff9UL, 0x43cfd006UL, 0xbe4cfdebUL,
-  0x40000000UL, 0x3fda656cUL, 0x686f0a4eUL, 0x3e5e47a8UL, 0xc0000000UL,
-  0x3fda3af2UL, 0x7200d410UL, 0x3e5e1199UL, 0xc0000000UL, 0x3fda108cUL,
-  0xabd2266eUL, 0x3e5ee4d1UL, 0x40000000UL, 0x3fd9e63aUL, 0x396f8f2cUL,
-  0x3e4dbffbUL, 0x00000000UL, 0x3fd9bbfbUL, 0xe32b25ddUL, 0x3e5c3a54UL,
-  0x40000000UL, 0x3fd991cfUL, 0x431e4035UL, 0xbe457925UL, 0x80000000UL,
-  0x3fd967b6UL, 0x7bed3dd3UL, 0x3e40c61dUL, 0x00000000UL, 0x3fd93db1UL,
-  0xd7449365UL, 0x3e306419UL, 0x80000000UL, 0x3fd913beUL, 0x1746e791UL,
-  0x3e56fcfcUL, 0x40000000UL, 0x3fd8e9dfUL, 0xf3a9028bUL, 0xbe5041b9UL,
-  0xc0000000UL, 0x3fd8c012UL, 0x56840c50UL, 0xbe26e20aUL, 0x40000000UL,
-  0x3fd89659UL, 0x19763102UL, 0xbe51f466UL, 0x80000000UL, 0x3fd86cb2UL,
-  0x7032de7cUL, 0xbe4d298aUL, 0x80000000UL, 0x3fd8431eUL, 0xdeb39fabUL,
-  0xbe4361ebUL, 0x40000000UL, 0x3fd8199dUL, 0x5d01cbe0UL, 0xbe5425b3UL,
-  0x80000000UL, 0x3fd7f02eUL, 0x3ce99aa9UL, 0x3e146fa8UL, 0x80000000UL,
-  0x3fd7c6d2UL, 0xd1a262b9UL, 0xbe5a1a69UL, 0xc0000000UL, 0x3fd79d88UL,
-  0x8606c236UL, 0x3e423a08UL, 0x80000000UL, 0x3fd77451UL, 0x8fd1e1b7UL,
-  0x3e5a6a63UL, 0xc0000000UL, 0x3fd74b2cUL, 0xe491456aUL, 0x3e42c1caUL,
-  0x40000000UL, 0x3fd7221aUL, 0x4499a6d7UL, 0x3e36a69aUL, 0x00000000UL,
-  0x3fd6f91aUL, 0x5237df94UL, 0xbe0f8f02UL, 0x00000000UL, 0x3fd6d02cUL,
-  0xb6482c6eUL, 0xbe5abcf7UL, 0x00000000UL, 0x3fd6a750UL, 0x1919fd61UL,
-  0xbe57ade2UL, 0x00000000UL, 0x3fd67e86UL, 0xaa7a994dUL, 0xbe3f3fbdUL,
-  0x00000000UL, 0x3fd655ceUL, 0x67db014cUL, 0x3e33c550UL, 0x00000000UL,
-  0x3fd62d28UL, 0xa82856b7UL, 0xbe1409d1UL, 0xc0000000UL, 0x3fd60493UL,
-  0x1e6a300dUL, 0x3e55d899UL, 0x80000000UL, 0x3fd5dc11UL, 0x1222bd5cUL,
-  0xbe35bfc0UL, 0xc0000000UL, 0x3fd5b3a0UL, 0x6e8dc2d3UL, 0x3e5d4d79UL,
-  0x00000000UL, 0x3fd58b42UL, 0xe0e4ace6UL, 0xbe517303UL, 0x80000000UL,
-  0x3fd562f4UL, 0xb306e0a8UL, 0x3e5edf0fUL, 0xc0000000UL, 0x3fd53ab8UL,
-  0x6574bc54UL, 0x3e5ee859UL, 0x80000000UL, 0x3fd5128eUL, 0xea902207UL,
-  0x3e5f6188UL, 0xc0000000UL, 0x3fd4ea75UL, 0x9f911d79UL, 0x3e511735UL,
-  0x80000000UL, 0x3fd4c26eUL, 0xf9c77397UL, 0xbe5b1643UL, 0x40000000UL,
-  0x3fd49a78UL, 0x15fc9258UL, 0x3e479a37UL, 0x80000000UL, 0x3fd47293UL,
-  0xd5a04dd9UL, 0xbe426e56UL, 0xc0000000UL, 0x3fd44abfUL, 0xe04042f5UL,
-  0x3e56f7c6UL, 0x40000000UL, 0x3fd422fdUL, 0x1d8bf2c8UL, 0x3e5d8810UL,
-  0x00000000UL, 0x3fd3fb4cUL, 0x88a8ddeeUL, 0xbe311454UL, 0xc0000000UL,
-  0x3fd3d3abUL, 0x3e3b5e47UL, 0xbe5d1b72UL, 0x40000000UL, 0x3fd3ac1cUL,
-  0xc2ab5d59UL, 0x3e31b02bUL, 0xc0000000UL, 0x3fd3849dUL, 0xd4e34b9eUL,
-  0x3e51cb2fUL, 0x40000000UL, 0x3fd35d30UL, 0x177204fbUL, 0xbe2b8cd7UL,
-  0x80000000UL, 0x3fd335d3UL, 0xfcd38c82UL, 0xbe4356e1UL, 0x80000000UL,
-  0x3fd30e87UL, 0x64f54accUL, 0xbe4e6224UL, 0x00000000UL, 0x3fd2e74cUL,
-  0xaa7975d9UL, 0x3e5dc0feUL, 0x80000000UL, 0x3fd2c021UL, 0x516dab3fUL,
-  0xbe50ffa3UL, 0x40000000UL, 0x3fd29907UL, 0x2bfb7313UL, 0x3e5674a2UL,
-  0xc0000000UL, 0x3fd271fdUL, 0x0549fc99UL, 0x3e385d29UL, 0xc0000000UL,
-  0x3fd24b04UL, 0x55b63073UL, 0xbe500c6dUL, 0x00000000UL, 0x3fd2241cUL,
-  0x3f91953aUL, 0x3e389977UL, 0xc0000000UL, 0x3fd1fd43UL, 0xa1543f71UL,
-  0xbe3487abUL, 0xc0000000UL, 0x3fd1d67bUL, 0x4ec8867cUL, 0x3df6a2dcUL,
-  0x00000000UL, 0x3fd1afc4UL, 0x4328e3bbUL, 0x3e41d9c0UL, 0x80000000UL,
-  0x3fd1891cUL, 0x2e1cda84UL, 0x3e3bdd87UL, 0x40000000UL, 0x3fd16285UL,
-  0x4b5331aeUL, 0xbe53128eUL, 0x00000000UL, 0x3fd13bfeUL, 0xb9aec164UL,
-  0xbe52ac98UL, 0xc0000000UL, 0x3fd11586UL, 0xd91e1316UL, 0xbe350630UL,
-  0x80000000UL, 0x3fd0ef1fUL, 0x7cacc12cUL, 0x3e3f5219UL, 0x40000000UL,
-  0x3fd0c8c8UL, 0xbce277b7UL, 0x3e3d30c0UL, 0x00000000UL, 0x3fd0a281UL,
-  0x2a63447dUL, 0xbe541377UL, 0x80000000UL, 0x3fd07c49UL, 0xfac483b5UL,
-  0xbe5772ecUL, 0xc0000000UL, 0x3fd05621UL, 0x36b8a570UL, 0xbe4fd4bdUL,
-  0xc0000000UL, 0x3fd03009UL, 0xbae505f7UL, 0xbe450388UL, 0x80000000UL,
-  0x3fd00a01UL, 0x3e35aeadUL, 0xbe5430fcUL, 0x80000000UL, 0x3fcfc811UL,
-  0x707475acUL, 0x3e38806eUL, 0x80000000UL, 0x3fcf7c3fUL, 0xc91817fcUL,
-  0xbe40cceaUL, 0x80000000UL, 0x3fcf308cUL, 0xae05d5e9UL, 0xbe4919b8UL,
-  0x80000000UL, 0x3fcee4f8UL, 0xae6cc9e6UL, 0xbe530b94UL, 0x00000000UL,
-  0x3fce9983UL, 0x1efe3e8eUL, 0x3e57747eUL, 0x00000000UL, 0x3fce4e2dUL,
-  0xda78d9bfUL, 0xbe59a608UL, 0x00000000UL, 0x3fce02f5UL, 0x8abe2c2eUL,
-  0x3e4a35adUL, 0x00000000UL, 0x3fcdb7dcUL, 0x1495450dUL, 0xbe0872ccUL,
-  0x80000000UL, 0x3fcd6ce1UL, 0x86ee0ba0UL, 0xbe4f59a0UL, 0x00000000UL,
-  0x3fcd2205UL, 0xe81ca888UL, 0x3e5402c3UL, 0x00000000UL, 0x3fccd747UL,
-  0x3b4424b9UL, 0x3e5dfdc3UL, 0x80000000UL, 0x3fcc8ca7UL, 0xd305b56cUL,
-  0x3e202da6UL, 0x00000000UL, 0x3fcc4226UL, 0x399a6910UL, 0xbe482a1cUL,
-  0x80000000UL, 0x3fcbf7c2UL, 0x747f7938UL, 0xbe587372UL, 0x80000000UL,
-  0x3fcbad7cUL, 0x6fc246a0UL, 0x3e50d83dUL, 0x00000000UL, 0x3fcb6355UL,
-  0xee9e9be5UL, 0xbe5c35bdUL, 0x80000000UL, 0x3fcb194aUL, 0x8416c0bcUL,
-  0x3e546d4fUL, 0x00000000UL, 0x3fcacf5eUL, 0x49f7f08fUL, 0x3e56da76UL,
-  0x00000000UL, 0x3fca858fUL, 0x5dc30de2UL, 0x3e5f390cUL, 0x00000000UL,
-  0x3fca3bdeUL, 0x950583b6UL, 0xbe5e4169UL, 0x80000000UL, 0x3fc9f249UL,
-  0x33631553UL, 0x3e52aeb1UL, 0x00000000UL, 0x3fc9a8d3UL, 0xde8795a6UL,
-  0xbe59a504UL, 0x00000000UL, 0x3fc95f79UL, 0x076bf41eUL, 0x3e5122feUL,
-  0x80000000UL, 0x3fc9163cUL, 0x2914c8e7UL, 0x3e3dd064UL, 0x00000000UL,
-  0x3fc8cd1dUL, 0x3a30eca3UL, 0xbe21b4aaUL, 0x80000000UL, 0x3fc8841aUL,
-  0xb2a96650UL, 0xbe575444UL, 0x80000000UL, 0x3fc83b34UL, 0x2376c0cbUL,
-  0xbe2a74c7UL, 0x80000000UL, 0x3fc7f26bUL, 0xd8a0b653UL, 0xbe5181b6UL,
-  0x00000000UL, 0x3fc7a9bfUL, 0x32257882UL, 0xbe4a78b4UL, 0x00000000UL,
-  0x3fc7612fUL, 0x1eee8bd9UL, 0xbe1bfe9dUL, 0x80000000UL, 0x3fc718bbUL,
-  0x0c603cc4UL, 0x3e36fdc9UL, 0x80000000UL, 0x3fc6d064UL, 0x3728b8cfUL,
-  0xbe1e542eUL, 0x80000000UL, 0x3fc68829UL, 0xc79a4067UL, 0x3e5c380fUL,
-  0x00000000UL, 0x3fc6400bUL, 0xf69eac69UL, 0x3e550a84UL, 0x80000000UL,
-  0x3fc5f808UL, 0xb7a780a4UL, 0x3e5d9224UL, 0x80000000UL, 0x3fc5b022UL,
-  0xad9dfb1eUL, 0xbe55242fUL, 0x00000000UL, 0x3fc56858UL, 0x659b18beUL,
-  0xbe4bfda3UL, 0x80000000UL, 0x3fc520a9UL, 0x66ee3631UL, 0xbe57d769UL,
-  0x80000000UL, 0x3fc4d916UL, 0x1ec62819UL, 0x3e2427f7UL, 0x80000000UL,
-  0x3fc4919fUL, 0xdec25369UL, 0xbe435431UL, 0x00000000UL, 0x3fc44a44UL,
-  0xa8acfc4bUL, 0xbe3c62e8UL, 0x00000000UL, 0x3fc40304UL, 0xcf1d3eabUL,
-  0xbdfba29fUL, 0x80000000UL, 0x3fc3bbdfUL, 0x79aba3eaUL, 0xbdf1b7c8UL,
-  0x80000000UL, 0x3fc374d6UL, 0xb8d186daUL, 0xbe5130cfUL, 0x80000000UL,
-  0x3fc32de8UL, 0x9d74f152UL, 0x3e2285b6UL, 0x00000000UL, 0x3fc2e716UL,
-  0x50ae7ca9UL, 0xbe503920UL, 0x80000000UL, 0x3fc2a05eUL, 0x6caed92eUL,
-  0xbe533924UL, 0x00000000UL, 0x3fc259c2UL, 0x9cb5034eUL, 0xbe510e31UL,
-  0x80000000UL, 0x3fc21340UL, 0x12c4d378UL, 0xbe540b43UL, 0x80000000UL,
-  0x3fc1ccd9UL, 0xcc418706UL, 0x3e59887aUL, 0x00000000UL, 0x3fc1868eUL,
-  0x921f4106UL, 0xbe528e67UL, 0x80000000UL, 0x3fc1405cUL, 0x3969441eUL,
-  0x3e5d8051UL, 0x00000000UL, 0x3fc0fa46UL, 0xd941ef5bUL, 0x3e5f9079UL,
-  0x80000000UL, 0x3fc0b44aUL, 0x5a3e81b2UL, 0xbe567691UL, 0x00000000UL,
-  0x3fc06e69UL, 0x9d66afe7UL, 0xbe4d43fbUL, 0x00000000UL, 0x3fc028a2UL,
-  0x0a92a162UL, 0xbe52f394UL, 0x00000000UL, 0x3fbfc5eaUL, 0x209897e5UL,
-  0x3e529e37UL, 0x00000000UL, 0x3fbf3ac5UL, 0x8458bd7bUL, 0x3e582831UL,
-  0x00000000UL, 0x3fbeafd5UL, 0xb8d8b4b8UL, 0xbe486b4aUL, 0x00000000UL,
-  0x3fbe2518UL, 0xe0a3b7b6UL, 0x3e5bafd2UL, 0x00000000UL, 0x3fbd9a90UL,
-  0x2bf2710eUL, 0x3e383b2bUL, 0x00000000UL, 0x3fbd103cUL, 0x73eb6ab7UL,
-  0xbe56d78dUL, 0x00000000UL, 0x3fbc861bUL, 0x32ceaff5UL, 0xbe32dc5aUL,
-  0x00000000UL, 0x3fbbfc2eUL, 0xbee04cb7UL, 0xbe4a71a4UL, 0x00000000UL,
-  0x3fbb7274UL, 0x35ae9577UL, 0x3e38142fUL, 0x00000000UL, 0x3fbae8eeUL,
-  0xcbaddab4UL, 0xbe5490f0UL, 0x00000000UL, 0x3fba5f9aUL, 0x95ce1114UL,
-  0x3e597c71UL, 0x00000000UL, 0x3fb9d67aUL, 0x6d7c0f78UL, 0x3e3abc2dUL,
-  0x00000000UL, 0x3fb94d8dUL, 0x2841a782UL, 0xbe566cbcUL, 0x00000000UL,
-  0x3fb8c4d2UL, 0x6ed429c6UL, 0xbe3cfff9UL, 0x00000000UL, 0x3fb83c4aUL,
-  0xe4a49fbbUL, 0xbe552964UL, 0x00000000UL, 0x3fb7b3f4UL, 0x2193d81eUL,
-  0xbe42fa72UL, 0x00000000UL, 0x3fb72bd0UL, 0xdd70c122UL, 0x3e527a8cUL,
-  0x00000000UL, 0x3fb6a3dfUL, 0x03108a54UL, 0xbe450393UL, 0x00000000UL,
-  0x3fb61c1fUL, 0x30ff7954UL, 0x3e565840UL, 0x00000000UL, 0x3fb59492UL,
-  0xdedd460cUL, 0xbe5422b5UL, 0x00000000UL, 0x3fb50d36UL, 0x950f9f45UL,
-  0xbe5313f6UL, 0x00000000UL, 0x3fb4860bUL, 0x582cdcb1UL, 0x3e506d39UL,
-  0x00000000UL, 0x3fb3ff12UL, 0x7216d3a6UL, 0x3e4aa719UL, 0x00000000UL,
-  0x3fb3784aUL, 0x57a423fdUL, 0x3e5a9b9fUL, 0x00000000UL, 0x3fb2f1b4UL,
-  0x7a138b41UL, 0xbe50b418UL, 0x00000000UL, 0x3fb26b4eUL, 0x2fbfd7eaUL,
-  0x3e23a53eUL, 0x00000000UL, 0x3fb1e519UL, 0x18913ccbUL, 0x3e465fc1UL,
-  0x00000000UL, 0x3fb15f15UL, 0x7ea24e21UL, 0x3e042843UL, 0x00000000UL,
-  0x3fb0d941UL, 0x7c6d9c77UL, 0x3e59f61eUL, 0x00000000UL, 0x3fb0539eUL,
-  0x114efd44UL, 0x3e4ccab7UL, 0x00000000UL, 0x3faf9c56UL, 0x1777f657UL,
-  0x3e552f65UL, 0x00000000UL, 0x3fae91d2UL, 0xc317b86aUL, 0xbe5a61e0UL,
-  0x00000000UL, 0x3fad87acUL, 0xb7664efbUL, 0xbe41f64eUL, 0x00000000UL,
-  0x3fac7de6UL, 0x5d3d03a9UL, 0x3e0807a0UL, 0x00000000UL, 0x3fab7480UL,
-  0x743c38ebUL, 0xbe3726e1UL, 0x00000000UL, 0x3faa6b78UL, 0x06a253f1UL,
-  0x3e5ad636UL, 0x00000000UL, 0x3fa962d0UL, 0xa35f541bUL, 0x3e5a187aUL,
-  0x00000000UL, 0x3fa85a88UL, 0x4b86e446UL, 0xbe508150UL, 0x00000000UL,
-  0x3fa7529cUL, 0x2589cacfUL, 0x3e52938aUL, 0x00000000UL, 0x3fa64b10UL,
-  0xaf6b11f2UL, 0xbe3454cdUL, 0x00000000UL, 0x3fa543e2UL, 0x97506fefUL,
-  0xbe5fdec5UL, 0x00000000UL, 0x3fa43d10UL, 0xe75f7dd9UL, 0xbe388dd3UL,
-  0x00000000UL, 0x3fa3369cUL, 0xa4139632UL, 0xbdea5177UL, 0x00000000UL,
-  0x3fa23086UL, 0x352d6f1eUL, 0xbe565ad6UL, 0x00000000UL, 0x3fa12accUL,
-  0x77449eb7UL, 0xbe50d5c7UL, 0x00000000UL, 0x3fa0256eUL, 0x7478da78UL,
-  0x3e404724UL, 0x00000000UL, 0x3f9e40dcUL, 0xf59cef7fUL, 0xbe539d0aUL,
-  0x00000000UL, 0x3f9c3790UL, 0x1511d43cUL, 0x3e53c2c8UL, 0x00000000UL,
-  0x3f9a2f00UL, 0x9b8bff3cUL, 0xbe43b3e1UL, 0x00000000UL, 0x3f982724UL,
-  0xad1e22a5UL, 0x3e46f0bdUL, 0x00000000UL, 0x3f962000UL, 0x130d9356UL,
-  0x3e475ba0UL, 0x00000000UL, 0x3f941994UL, 0x8f86f883UL, 0xbe513d0bUL,
-  0x00000000UL, 0x3f9213dcUL, 0x914d0dc8UL, 0xbe534335UL, 0x00000000UL,
-  0x3f900ed8UL, 0x2d73e5e7UL, 0xbe22ba75UL, 0x00000000UL, 0x3f8c1510UL,
-  0xc5b7d70eUL, 0x3e599c5dUL, 0x00000000UL, 0x3f880de0UL, 0x8a27857eUL,
-  0xbe3d28c8UL, 0x00000000UL, 0x3f840810UL, 0xda767328UL, 0x3e531b3dUL,
-  0x00000000UL, 0x3f8003b0UL, 0x77bacaf3UL, 0xbe5f04e3UL, 0x00000000UL,
-  0x3f780150UL, 0xdf4b0720UL, 0x3e5a8bffUL, 0x00000000UL, 0x3f6ffc40UL,
-  0x34c48e71UL, 0xbe3fcd99UL, 0x00000000UL, 0x3f5ff6c0UL, 0x1ad218afUL,
-  0xbe4c78a7UL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x80000000UL,
-  0x00000000UL, 0xfffff800UL, 0x00000000UL, 0xfffff800UL, 0x00000000UL,
-  0x3ff72000UL, 0x161bb241UL, 0xbf5dabe1UL, 0x6dc96112UL, 0xbf836578UL,
-  0xee241472UL, 0xbf9b0301UL, 0x9f95985aUL, 0xbfb528dbUL, 0xb3841d2aUL,
-  0xbfd619b6UL, 0x518775e3UL, 0x3f9004f2UL, 0xac8349bbUL, 0x3fa76c9bUL,
-  0x486ececcUL, 0x3fc4635eUL, 0x161bb241UL, 0xbf5dabe1UL, 0x9f95985aUL,
-  0xbfb528dbUL, 0xf8b5787dUL, 0x3ef2531eUL, 0x486ececbUL, 0x3fc4635eUL,
-  0x412055ccUL, 0xbdd61bb2UL, 0x00000000UL, 0xfffffff8UL, 0x00000000UL,
-  0xffffffffUL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0x3b700000UL,
-  0xfa5abcbfUL, 0x3ff00b1aUL, 0xa7609f71UL, 0xbc84f6b2UL, 0xa9fb3335UL,
-  0x3ff0163dUL, 0x9ab8cdb7UL, 0x3c9b6129UL, 0x143b0281UL, 0x3ff02168UL,
-  0x0fc54eb6UL, 0xbc82bf31UL, 0x3e778061UL, 0x3ff02c9aUL, 0x535b085dUL,
-  0xbc719083UL, 0x2e11bbccUL, 0x3ff037d4UL, 0xeeade11aUL, 0x3c656811UL,
-  0xe86e7f85UL, 0x3ff04315UL, 0x1977c96eUL, 0xbc90a31cUL, 0x72f654b1UL,
-  0x3ff04e5fUL, 0x3aa0d08cUL, 0x3c84c379UL, 0xd3158574UL, 0x3ff059b0UL,
-  0xa475b465UL, 0x3c8d73e2UL, 0x0e3c1f89UL, 0x3ff0650aUL, 0x5799c397UL,
-  0xbc95cb7bUL, 0x29ddf6deUL, 0x3ff0706bUL, 0xe2b13c27UL, 0xbc8c91dfUL,
-  0x2b72a836UL, 0x3ff07bd4UL, 0x54458700UL, 0x3c832334UL, 0x18759bc8UL,
-  0x3ff08745UL, 0x4bb284ffUL, 0x3c6186beUL, 0xf66607e0UL, 0x3ff092bdUL,
-  0x800a3fd1UL, 0xbc968063UL, 0xcac6f383UL, 0x3ff09e3eUL, 0x18316136UL,
-  0x3c914878UL, 0x9b1f3919UL, 0x3ff0a9c7UL, 0x873d1d38UL, 0x3c85d16cUL,
-  0x6cf9890fUL, 0x3ff0b558UL, 0x4adc610bUL, 0x3c98a62eUL, 0x45e46c85UL,
-  0x3ff0c0f1UL, 0x06d21cefUL, 0x3c94f989UL, 0x2b7247f7UL, 0x3ff0cc92UL,
-  0x16e24f71UL, 0x3c901edcUL, 0x23395decUL, 0x3ff0d83bUL, 0xe43f316aUL,
-  0xbc9bc14dUL, 0x32d3d1a2UL, 0x3ff0e3ecUL, 0x27c57b52UL, 0x3c403a17UL,
-  0x5fdfa9c5UL, 0x3ff0efa5UL, 0xbc54021bUL, 0xbc949db9UL, 0xaffed31bUL,
-  0x3ff0fb66UL, 0xc44ebd7bUL, 0xbc6b9bedUL, 0x28d7233eUL, 0x3ff10730UL,
-  0x1692fdd5UL, 0x3c8d46ebUL, 0xd0125b51UL, 0x3ff11301UL, 0x39449b3aUL,
-  0xbc96c510UL, 0xab5e2ab6UL, 0x3ff11edbUL, 0xf703fb72UL, 0xbc9ca454UL,
-  0xc06c31ccUL, 0x3ff12abdUL, 0xb36ca5c7UL, 0xbc51b514UL, 0x14f204abUL,
-  0x3ff136a8UL, 0xba48dcf0UL, 0xbc67108fUL, 0xaea92de0UL, 0x3ff1429aUL,
-  0x9af1369eUL, 0xbc932fbfUL, 0x934f312eUL, 0x3ff14e95UL, 0x39bf44abUL,
-  0xbc8b91e8UL, 0xc8a58e51UL, 0x3ff15a98UL, 0xb9eeab0aUL, 0x3c82406aUL,
-  0x5471c3c2UL, 0x3ff166a4UL, 0x82ea1a32UL, 0x3c58f23bUL, 0x3c7d517bUL,
-  0x3ff172b8UL, 0xb9d78a76UL, 0xbc819041UL, 0x8695bbc0UL, 0x3ff17ed4UL,
-  0xe2ac5a64UL, 0x3c709e3fUL, 0x388c8deaUL, 0x3ff18af9UL, 0xd1970f6cUL,
-  0xbc911023UL, 0x58375d2fUL, 0x3ff19726UL, 0x85f17e08UL, 0x3c94aaddUL,
-  0xeb6fcb75UL, 0x3ff1a35bUL, 0x7b4968e4UL, 0x3c8e5b4cUL, 0xf8138a1cUL,
-  0x3ff1af99UL, 0xa4b69280UL, 0x3c97bf85UL, 0x84045cd4UL, 0x3ff1bbe0UL,
-  0x352ef607UL, 0xbc995386UL, 0x95281c6bUL, 0x3ff1c82fUL, 0x8010f8c9UL,
-  0x3c900977UL, 0x3168b9aaUL, 0x3ff1d487UL, 0x00a2643cUL, 0x3c9e016eUL,
-  0x5eb44027UL, 0x3ff1e0e7UL, 0x088cb6deUL, 0xbc96fdd8UL, 0x22fcd91dUL,
-  0x3ff1ed50UL, 0x027bb78cUL, 0xbc91df98UL, 0x8438ce4dUL, 0x3ff1f9c1UL,
-  0xa097af5cUL, 0xbc9bf524UL, 0x88628cd6UL, 0x3ff2063bUL, 0x814a8495UL,
-  0x3c8dc775UL, 0x3578a819UL, 0x3ff212beUL, 0x2cfcaac9UL, 0x3c93592dUL,
-  0x917ddc96UL, 0x3ff21f49UL, 0x9494a5eeUL, 0x3c82a97eUL, 0xa27912d1UL,
-  0x3ff22bddUL, 0x5577d69fUL, 0x3c8d34fbUL, 0x6e756238UL, 0x3ff2387aUL,
-  0xb6c70573UL, 0x3c99b07eUL, 0xfb82140aUL, 0x3ff2451fUL, 0x911ca996UL,
-  0x3c8acfccUL, 0x4fb2a63fUL, 0x3ff251ceUL, 0xbef4f4a4UL, 0x3c8ac155UL,
-  0x711ece75UL, 0x3ff25e85UL, 0x4ac31b2cUL, 0x3c93e1a2UL, 0x65e27cddUL,
-  0x3ff26b45UL, 0x9940e9d9UL, 0x3c82bd33UL, 0x341ddf29UL, 0x3ff2780eUL,
-  0x05f9e76cUL, 0x3c9e067cUL, 0xe1f56381UL, 0x3ff284dfUL, 0x8c3f0d7eUL,
-  0xbc9a4c3aUL, 0x7591bb70UL, 0x3ff291baUL, 0x28401cbdUL, 0xbc82cc72UL,
-  0xf51fdee1UL, 0x3ff29e9dUL, 0xafad1255UL, 0x3c8612e8UL, 0x66d10f13UL,
-  0x3ff2ab8aUL, 0x191690a7UL, 0xbc995743UL, 0xd0dad990UL, 0x3ff2b87fUL,
-  0xd6381aa4UL, 0xbc410adcUL, 0x39771b2fUL, 0x3ff2c57eUL, 0xa6eb5124UL,
-  0xbc950145UL, 0xa6e4030bUL, 0x3ff2d285UL, 0x54db41d5UL, 0x3c900247UL,
-  0x1f641589UL, 0x3ff2df96UL, 0xfbbce198UL, 0x3c9d16cfUL, 0xa93e2f56UL,
-  0x3ff2ecafUL, 0x45d52383UL, 0x3c71ca0fUL, 0x4abd886bUL, 0x3ff2f9d2UL,
-  0x532bda93UL, 0xbc653c55UL, 0x0a31b715UL, 0x3ff306feUL, 0xd23182e4UL,
-  0x3c86f46aUL, 0xedeeb2fdUL, 0x3ff31432UL, 0xf3f3fcd1UL, 0x3c8959a3UL,
-  0xfc4cd831UL, 0x3ff32170UL, 0x8e18047cUL, 0x3c8a9ce7UL, 0x3ba8ea32UL,
-  0x3ff32eb8UL, 0x3cb4f318UL, 0xbc9c45e8UL, 0xb26416ffUL, 0x3ff33c08UL,
-  0x843659a6UL, 0x3c932721UL, 0x66e3fa2dUL, 0x3ff34962UL, 0x930881a4UL,
-  0xbc835a75UL, 0x5f929ff1UL, 0x3ff356c5UL, 0x5c4e4628UL, 0xbc8b5ceeUL,
-  0xa2de883bUL, 0x3ff36431UL, 0xa06cb85eUL, 0xbc8c3144UL, 0x373aa9cbUL,
-  0x3ff371a7UL, 0xbf42eae2UL, 0xbc963aeaUL, 0x231e754aUL, 0x3ff37f26UL,
-  0x9eceb23cUL, 0xbc99f5caUL, 0x6d05d866UL, 0x3ff38caeUL, 0x3c9904bdUL,
-  0xbc9e958dUL, 0x1b7140efUL, 0x3ff39a40UL, 0xfc8e2934UL, 0xbc99a9a5UL,
-  0x34e59ff7UL, 0x3ff3a7dbUL, 0xd661f5e3UL, 0xbc75e436UL, 0xbfec6cf4UL,
-  0x3ff3b57fUL, 0xe26fff18UL, 0x3c954c66UL, 0xc313a8e5UL, 0x3ff3c32dUL,
-  0x375d29c3UL, 0xbc9efff8UL, 0x44ede173UL, 0x3ff3d0e5UL, 0x8c284c71UL,
-  0x3c7fe8d0UL, 0x4c123422UL, 0x3ff3dea6UL, 0x11f09ebcUL, 0x3c8ada09UL,
-  0xdf1c5175UL, 0x3ff3ec70UL, 0x7b8c9bcaUL, 0xbc8af663UL, 0x04ac801cUL,
-  0x3ff3fa45UL, 0xf956f9f3UL, 0xbc97d023UL, 0xc367a024UL, 0x3ff40822UL,
-  0xb6f4d048UL, 0x3c8bddf8UL, 0x21f72e2aUL, 0x3ff4160aUL, 0x1c309278UL,
-  0xbc5ef369UL, 0x2709468aUL, 0x3ff423fbUL, 0xc0b314ddUL, 0xbc98462dUL,
-  0xd950a897UL, 0x3ff431f5UL, 0xe35f7999UL, 0xbc81c7ddUL, 0x3f84b9d4UL,
-  0x3ff43ffaUL, 0x9704c003UL, 0x3c8880beUL, 0x6061892dUL, 0x3ff44e08UL,
-  0x04ef80d0UL, 0x3c489b7aUL, 0x42a7d232UL, 0x3ff45c20UL, 0x82fb1f8eUL,
-  0xbc686419UL, 0xed1d0057UL, 0x3ff46a41UL, 0xd1648a76UL, 0x3c9c944bUL,
-  0x668b3237UL, 0x3ff4786dUL, 0xed445733UL, 0xbc9c20f0UL, 0xb5c13cd0UL,
-  0x3ff486a2UL, 0xb69062f0UL, 0x3c73c1a3UL, 0xe192aed2UL, 0x3ff494e1UL,
-  0x5e499ea0UL, 0xbc83b289UL, 0xf0d7d3deUL, 0x3ff4a32aUL, 0xf3d1be56UL,
-  0x3c99cb62UL, 0xea6db7d7UL, 0x3ff4b17dUL, 0x7f2897f0UL, 0xbc8125b8UL,
-  0xd5362a27UL, 0x3ff4bfdaUL, 0xafec42e2UL, 0x3c7d4397UL, 0xb817c114UL,
-  0x3ff4ce41UL, 0x690abd5dUL, 0x3c905e29UL, 0x99fddd0dUL, 0x3ff4dcb2UL,
-  0xbc6a7833UL, 0x3c98ecdbUL, 0x81d8abffUL, 0x3ff4eb2dUL, 0x2e5d7a52UL,
-  0xbc95257dUL, 0x769d2ca7UL, 0x3ff4f9b2UL, 0xd25957e3UL, 0xbc94b309UL,
-  0x7f4531eeUL, 0x3ff50841UL, 0x49b7465fUL, 0x3c7a249bUL, 0xa2cf6642UL,
-  0x3ff516daUL, 0x69bd93efUL, 0xbc8f7685UL, 0xe83f4eefUL, 0x3ff5257dUL,
-  0x43efef71UL, 0xbc7c998dUL, 0x569d4f82UL, 0x3ff5342bUL, 0x1db13cadUL,
-  0xbc807abeUL, 0xf4f6ad27UL, 0x3ff542e2UL, 0x192d5f7eUL, 0x3c87926dUL,
-  0xca5d920fUL, 0x3ff551a4UL, 0xefede59bUL, 0xbc8d689cUL, 0xdde910d2UL,
-  0x3ff56070UL, 0x168eebf0UL, 0xbc90fb6eUL, 0x36b527daUL, 0x3ff56f47UL,
-  0x011d93adUL, 0x3c99bb2cUL, 0xdbe2c4cfUL, 0x3ff57e27UL, 0x8a57b9c4UL,
-  0xbc90b98cUL, 0xd497c7fdUL, 0x3ff58d12UL, 0x5b9a1de8UL, 0x3c8295e1UL,
-  0x27ff07ccUL, 0x3ff59c08UL, 0xe467e60fUL, 0xbc97e2ceUL, 0xdd485429UL,
-  0x3ff5ab07UL, 0x054647adUL, 0x3c96324cUL, 0xfba87a03UL, 0x3ff5ba11UL,
-  0x4c233e1aUL, 0xbc9b77a1UL, 0x8a5946b7UL, 0x3ff5c926UL, 0x816986a2UL,
-  0x3c3c4b1bUL, 0x90998b93UL, 0x3ff5d845UL, 0xa8b45643UL, 0xbc9cd6a7UL,
-  0x15ad2148UL, 0x3ff5e76fUL, 0x3080e65eUL, 0x3c9ba6f9UL, 0x20dceb71UL,
-  0x3ff5f6a3UL, 0xe3cdcf92UL, 0xbc89eaddUL, 0xb976dc09UL, 0x3ff605e1UL,
-  0x9b56de47UL, 0xbc93e242UL, 0xe6cdf6f4UL, 0x3ff6152aUL, 0x4ab84c27UL,
-  0x3c9e4b3eUL, 0xb03a5585UL, 0x3ff6247eUL, 0x7e40b497UL, 0xbc9383c1UL,
-  0x1d1929fdUL, 0x3ff633ddUL, 0xbeb964e5UL, 0x3c984710UL, 0x34ccc320UL,
-  0x3ff64346UL, 0x759d8933UL, 0xbc8c483cUL, 0xfebc8fb7UL, 0x3ff652b9UL,
-  0xc9a73e09UL, 0xbc9ae3d5UL, 0x82552225UL, 0x3ff66238UL, 0x87591c34UL,
-  0xbc9bb609UL, 0xc70833f6UL, 0x3ff671c1UL, 0x586c6134UL, 0xbc8e8732UL,
-  0xd44ca973UL, 0x3ff68155UL, 0x44f73e65UL, 0x3c6038aeUL, 0xb19e9538UL,
-  0x3ff690f4UL, 0x9aeb445dUL, 0x3c8804bdUL, 0x667f3bcdUL, 0x3ff6a09eUL,
-  0x13b26456UL, 0xbc9bdd34UL, 0xfa75173eUL, 0x3ff6b052UL, 0x2c9a9d0eUL,
-  0x3c7a38f5UL, 0x750bdabfUL, 0x3ff6c012UL, 0x67ff0b0dUL, 0xbc728956UL,
-  0xddd47645UL, 0x3ff6cfdcUL, 0xb6f17309UL, 0x3c9c7aa9UL, 0x3c651a2fUL,
-  0x3ff6dfb2UL, 0x683c88abUL, 0xbc6bbe3aUL, 0x98593ae5UL, 0x3ff6ef92UL,
-  0x9e1ac8b2UL, 0xbc90b974UL, 0xf9519484UL, 0x3ff6ff7dUL, 0x25860ef6UL,
-  0xbc883c0fUL, 0x66f42e87UL, 0x3ff70f74UL, 0xd45aa65fUL, 0x3c59d644UL,
-  0xe8ec5f74UL, 0x3ff71f75UL, 0x86887a99UL, 0xbc816e47UL, 0x86ead08aUL,
-  0x3ff72f82UL, 0x2cd62c72UL, 0xbc920aa0UL, 0x48a58174UL, 0x3ff73f9aUL,
-  0x6c65d53cUL, 0xbc90a8d9UL, 0x35d7cbfdUL, 0x3ff74fbdUL, 0x618a6e1cUL,
-  0x3c9047fdUL, 0x564267c9UL, 0x3ff75febUL, 0x57316dd3UL, 0xbc902459UL,
-  0xb1ab6e09UL, 0x3ff77024UL, 0x169147f8UL, 0x3c9b7877UL, 0x4fde5d3fUL,
-  0x3ff78069UL, 0x0a02162dUL, 0x3c9866b8UL, 0x38ac1cf6UL, 0x3ff790b9UL,
-  0x62aadd3eUL, 0x3c9349a8UL, 0x73eb0187UL, 0x3ff7a114UL, 0xee04992fUL,
-  0xbc841577UL, 0x0976cfdbUL, 0x3ff7b17bUL, 0x8468dc88UL, 0xbc9bebb5UL,
-  0x0130c132UL, 0x3ff7c1edUL, 0xd1164dd6UL, 0x3c9f124cUL, 0x62ff86f0UL,
-  0x3ff7d26aUL, 0xfb72b8b4UL, 0x3c91bddbUL, 0x36cf4e62UL, 0x3ff7e2f3UL,
-  0xba15797eUL, 0x3c705d02UL, 0x8491c491UL, 0x3ff7f387UL, 0xcf9311aeUL,
-  0xbc807f11UL, 0x543e1a12UL, 0x3ff80427UL, 0x626d972bUL, 0xbc927c86UL,
-  0xadd106d9UL, 0x3ff814d2UL, 0x0d151d4dUL, 0x3c946437UL, 0x994cce13UL,
-  0x3ff82589UL, 0xd41532d8UL, 0xbc9d4c1dUL, 0x1eb941f7UL, 0x3ff8364cUL,
-  0x31df2bd5UL, 0x3c999b9aUL, 0x4623c7adUL, 0x3ff8471aUL, 0xa341cdfbUL,
-  0xbc88d684UL, 0x179f5b21UL, 0x3ff857f4UL, 0xf8b216d0UL, 0xbc5ba748UL,
-  0x9b4492edUL, 0x3ff868d9UL, 0x9bd4f6baUL, 0xbc9fc6f8UL, 0xd931a436UL,
-  0x3ff879caUL, 0xd2db47bdUL, 0x3c85d2d7UL, 0xd98a6699UL, 0x3ff88ac7UL,
-  0xf37cb53aUL, 0x3c9994c2UL, 0xa478580fUL, 0x3ff89bd0UL, 0x4475202aUL,
-  0x3c9d5395UL, 0x422aa0dbUL, 0x3ff8ace5UL, 0x56864b27UL, 0x3c96e9f1UL,
-  0xbad61778UL, 0x3ff8be05UL, 0xfc43446eUL, 0x3c9ecb5eUL, 0x16b5448cUL,
-  0x3ff8cf32UL, 0x32e9e3aaUL, 0xbc70d55eUL, 0x5e0866d9UL, 0x3ff8e06aUL,
-  0x6fc9b2e6UL, 0xbc97114aUL, 0x99157736UL, 0x3ff8f1aeUL, 0xa2e3976cUL,
-  0x3c85cc13UL, 0xd0282c8aUL, 0x3ff902feUL, 0x85fe3fd2UL, 0x3c9592caUL,
-  0x0b91ffc6UL, 0x3ff9145bUL, 0x2e582524UL, 0xbc9dd679UL, 0x53aa2fe2UL,
-  0x3ff925c3UL, 0xa639db7fUL, 0xbc83455fUL, 0xb0cdc5e5UL, 0x3ff93737UL,
-  0x81b57ebcUL, 0xbc675fc7UL, 0x2b5f98e5UL, 0x3ff948b8UL, 0x797d2d99UL,
-  0xbc8dc3d6UL, 0xcbc8520fUL, 0x3ff95a44UL, 0x96a5f039UL, 0xbc764b7cUL,
-  0x9a7670b3UL, 0x3ff96bddUL, 0x7f19c896UL, 0xbc5ba596UL, 0x9fde4e50UL,
-  0x3ff97d82UL, 0x7c1b85d1UL, 0xbc9d185bUL, 0xe47a22a2UL, 0x3ff98f33UL,
-  0xa24c78ecUL, 0x3c7cabdaUL, 0x70ca07baUL, 0x3ff9a0f1UL, 0x91cee632UL,
-  0xbc9173bdUL, 0x4d53fe0dUL, 0x3ff9b2bbUL, 0x4df6d518UL, 0xbc9dd84eUL,
-  0x82a3f090UL, 0x3ff9c491UL, 0xb071f2beUL, 0x3c7c7c46UL, 0x194bb8d5UL,
-  0x3ff9d674UL, 0xa3dd8233UL, 0xbc9516beUL, 0x19e32323UL, 0x3ff9e863UL,
-  0x78e64c6eUL, 0x3c7824caUL, 0x8d07f29eUL, 0x3ff9fa5eUL, 0xaaf1faceUL,
-  0xbc84a9ceUL, 0x7b5de565UL, 0x3ffa0c66UL, 0x5d1cd533UL, 0xbc935949UL,
-  0xed8eb8bbUL, 0x3ffa1e7aUL, 0xee8be70eUL, 0x3c9c6618UL, 0xec4a2d33UL,
-  0x3ffa309bUL, 0x7ddc36abUL, 0x3c96305cUL, 0x80460ad8UL, 0x3ffa42c9UL,
-  0x589fb120UL, 0xbc9aa780UL, 0xb23e255dUL, 0x3ffa5503UL, 0xdb8d41e1UL,
-  0xbc9d2f6eUL, 0x8af46052UL, 0x3ffa674aUL, 0x30670366UL, 0x3c650f56UL,
-  0x1330b358UL, 0x3ffa799eUL, 0xcac563c7UL, 0x3c9bcb7eUL, 0x53c12e59UL,
-  0x3ffa8bfeUL, 0xb2ba15a9UL, 0xbc94f867UL, 0x5579fdbfUL, 0x3ffa9e6bUL,
-  0x0ef7fd31UL, 0x3c90fac9UL, 0x21356ebaUL, 0x3ffab0e5UL, 0xdae94545UL,
-  0x3c889c31UL, 0xbfd3f37aUL, 0x3ffac36bUL, 0xcae76cd0UL, 0xbc8f9234UL,
-  0x3a3c2774UL, 0x3ffad5ffUL, 0xb6b1b8e5UL, 0x3c97ef3bUL, 0x995ad3adUL,
-  0x3ffae89fUL, 0x345dcc81UL, 0x3c97a1cdUL, 0xe622f2ffUL, 0x3ffafb4cUL,
-  0x0f315ecdUL, 0xbc94b2fcUL, 0x298db666UL, 0x3ffb0e07UL, 0x4c80e425UL,
-  0xbc9bdef5UL, 0x6c9a8952UL, 0x3ffb20ceUL, 0x4a0756ccUL, 0x3c94dd02UL,
-  0xb84f15fbUL, 0x3ffb33a2UL, 0x3084d708UL, 0xbc62805eUL, 0x15b749b1UL,
-  0x3ffb4684UL, 0xe9df7c90UL, 0xbc7f763dUL, 0x8de5593aUL, 0x3ffb5972UL,
-  0xbbba6de3UL, 0xbc9c71dfUL, 0x29f1c52aUL, 0x3ffb6c6eUL, 0x52883f6eUL,
-  0x3c92a8f3UL, 0xf2fb5e47UL, 0x3ffb7f76UL, 0x7e54ac3bUL, 0xbc75584fUL,
-  0xf22749e4UL, 0x3ffb928cUL, 0x54cb65c6UL, 0xbc9b7216UL, 0x30a1064aUL,
-  0x3ffba5b0UL, 0x0e54292eUL, 0xbc9efcd3UL, 0xb79a6f1fUL, 0x3ffbb8e0UL,
-  0xc9696205UL, 0xbc3f52d1UL, 0x904bc1d2UL, 0x3ffbcc1eUL, 0x7a2d9e84UL,
-  0x3c823dd0UL, 0xc3f3a207UL, 0x3ffbdf69UL, 0x60ea5b53UL, 0xbc3c2623UL,
-  0x5bd71e09UL, 0x3ffbf2c2UL, 0x3f6b9c73UL, 0xbc9efdcaUL, 0x6141b33dUL,
-  0x3ffc0628UL, 0xa1fbca34UL, 0xbc8d8a5aUL, 0xdd85529cUL, 0x3ffc199bUL,
-  0x895048ddUL, 0x3c811065UL, 0xd9fa652cUL, 0x3ffc2d1cUL, 0x17c8a5d7UL,
-  0xbc96e516UL, 0x5fffd07aUL, 0x3ffc40abUL, 0xe083c60aUL, 0x3c9b4537UL,
-  0x78fafb22UL, 0x3ffc5447UL, 0x2493b5afUL, 0x3c912f07UL, 0x2e57d14bUL,
-  0x3ffc67f1UL, 0xff483cadUL, 0x3c92884dUL, 0x8988c933UL, 0x3ffc7ba8UL,
-  0xbe255559UL, 0xbc8e76bbUL, 0x9406e7b5UL, 0x3ffc8f6dUL, 0x48805c44UL,
-  0x3c71acbcUL, 0x5751c4dbUL, 0x3ffca340UL, 0xd10d08f5UL, 0xbc87f2beUL,
-  0xdcef9069UL, 0x3ffcb720UL, 0xd1e949dbUL, 0x3c7503cbUL, 0x2e6d1675UL,
-  0x3ffccb0fUL, 0x86009092UL, 0xbc7d220fUL, 0x555dc3faUL, 0x3ffcdf0bUL,
-  0x53829d72UL, 0xbc8dd83bUL, 0x5b5bab74UL, 0x3ffcf315UL, 0xb86dff57UL,
-  0xbc9a08e9UL, 0x4a07897cUL, 0x3ffd072dUL, 0x43797a9cUL, 0xbc9cbc37UL,
-  0x2b08c968UL, 0x3ffd1b53UL, 0x219a36eeUL, 0x3c955636UL, 0x080d89f2UL,
-  0x3ffd2f87UL, 0x719d8578UL, 0xbc9d487bUL, 0xeacaa1d6UL, 0x3ffd43c8UL,
-  0xbf5a1614UL, 0x3c93db53UL, 0xdcfba487UL, 0x3ffd5818UL, 0xd75b3707UL,
-  0x3c82ed02UL, 0xe862e6d3UL, 0x3ffd6c76UL, 0x4a8165a0UL, 0x3c5fe87aUL,
-  0x16c98398UL, 0x3ffd80e3UL, 0x8beddfe8UL, 0xbc911ec1UL, 0x71ff6075UL,
-  0x3ffd955dUL, 0xbb9af6beUL, 0x3c9a052dUL, 0x03db3285UL, 0x3ffda9e6UL,
-  0x696db532UL, 0x3c9c2300UL, 0xd63a8315UL, 0x3ffdbe7cUL, 0x926b8be4UL,
-  0xbc9b76f1UL, 0xf301b460UL, 0x3ffdd321UL, 0x78f018c3UL, 0x3c92da57UL,
-  0x641c0658UL, 0x3ffde7d5UL, 0x8e79ba8fUL, 0xbc9ca552UL, 0x337b9b5fUL,
-  0x3ffdfc97UL, 0x4f184b5cUL, 0xbc91a5cdUL, 0x6b197d17UL, 0x3ffe1167UL,
-  0xbd5c7f44UL, 0xbc72b529UL, 0x14f5a129UL, 0x3ffe2646UL, 0x817a1496UL,
-  0xbc97b627UL, 0x3b16ee12UL, 0x3ffe3b33UL, 0x31fdc68bUL, 0xbc99f4a4UL,
-  0xe78b3ff6UL, 0x3ffe502eUL, 0x80a9cc8fUL, 0x3c839e89UL, 0x24676d76UL,
-  0x3ffe6539UL, 0x7522b735UL, 0xbc863ff8UL, 0xfbc74c83UL, 0x3ffe7a51UL,
-  0xca0c8de2UL, 0x3c92d522UL, 0x77cdb740UL, 0x3ffe8f79UL, 0x80b054b1UL,
-  0xbc910894UL, 0xa2a490daUL, 0x3ffea4afUL, 0x179c2893UL, 0xbc9e9c23UL,
-  0x867cca6eUL, 0x3ffeb9f4UL, 0x2293e4f2UL, 0x3c94832fUL, 0x2d8e67f1UL,
-  0x3ffecf48UL, 0xb411ad8cUL, 0xbc9c93f3UL, 0xa2188510UL, 0x3ffee4aaUL,
-  0xa487568dUL, 0x3c91c68dUL, 0xee615a27UL, 0x3ffefa1bUL, 0x86a4b6b0UL,
-  0x3c9dc7f4UL, 0x1cb6412aUL, 0x3fff0f9cUL, 0x65181d45UL, 0xbc932200UL,
-  0x376bba97UL, 0x3fff252bUL, 0xbf0d8e43UL, 0x3c93a1a5UL, 0x48dd7274UL,
-  0x3fff3ac9UL, 0x3ed837deUL, 0xbc795a5aUL, 0x5b6e4540UL, 0x3fff5076UL,
-  0x2dd8a18bUL, 0x3c99d3e1UL, 0x798844f8UL, 0x3fff6632UL, 0x3539343eUL,
-  0x3c9fa37bUL, 0xad9cbe14UL, 0x3fff7bfdUL, 0xd006350aUL, 0xbc9dbb12UL,
-  0x02243c89UL, 0x3fff91d8UL, 0xa779f689UL, 0xbc612ea8UL, 0x819e90d8UL,
-  0x3fffa7c1UL, 0xf3a5931eUL, 0x3c874853UL, 0x3692d514UL, 0x3fffbdbaUL,
-  0x15098eb6UL, 0xbc796773UL, 0x2b8f71f1UL, 0x3fffd3c2UL, 0x966579e7UL,
-  0x3c62eb74UL, 0x6b2a23d9UL, 0x3fffe9d9UL, 0x7442fde3UL, 0x3c74a603UL,
-  0xe78a6731UL, 0x3f55d87fUL, 0xd704a0c0UL, 0x3fac6b08UL, 0x6fba4e77UL,
-  0x3f83b2abUL, 0xff82c58fUL, 0x3fcebfbdUL, 0xfefa39efUL, 0x3fe62e42UL,
-  0x00000000UL, 0x00000000UL, 0xfefa39efUL, 0x3fe62e42UL, 0xfefa39efUL,
-  0xbfe62e42UL, 0xf8000000UL, 0xffffffffUL, 0xf8000000UL, 0xffffffffUL,
-  0x00000000UL, 0x80000000UL, 0x00000000UL, 0x00000000UL
-
-};
-
-//registers,
-// input: xmm0, xmm1
-// scratch: xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7
-//          eax, edx, ecx, ebx
-
-// Code generated by Intel C compiler for LIBM library
-
-void MacroAssembler::fast_pow(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ecx, Register edx, Register tmp) {
-  Label L_2TAG_PACKET_0_0_2, L_2TAG_PACKET_1_0_2, L_2TAG_PACKET_2_0_2, L_2TAG_PACKET_3_0_2;
-  Label L_2TAG_PACKET_4_0_2, L_2TAG_PACKET_5_0_2, L_2TAG_PACKET_6_0_2, L_2TAG_PACKET_7_0_2;
-  Label L_2TAG_PACKET_8_0_2, L_2TAG_PACKET_9_0_2, L_2TAG_PACKET_10_0_2, L_2TAG_PACKET_11_0_2;
-  Label L_2TAG_PACKET_12_0_2, L_2TAG_PACKET_13_0_2, L_2TAG_PACKET_14_0_2, L_2TAG_PACKET_15_0_2;
-  Label L_2TAG_PACKET_16_0_2, L_2TAG_PACKET_17_0_2, L_2TAG_PACKET_18_0_2, L_2TAG_PACKET_19_0_2;
-  Label L_2TAG_PACKET_20_0_2, L_2TAG_PACKET_21_0_2, L_2TAG_PACKET_22_0_2, L_2TAG_PACKET_23_0_2;
-  Label L_2TAG_PACKET_24_0_2, L_2TAG_PACKET_25_0_2, L_2TAG_PACKET_26_0_2, L_2TAG_PACKET_27_0_2;
-  Label L_2TAG_PACKET_28_0_2, L_2TAG_PACKET_29_0_2, L_2TAG_PACKET_30_0_2, L_2TAG_PACKET_31_0_2;
-  Label L_2TAG_PACKET_32_0_2, L_2TAG_PACKET_33_0_2, L_2TAG_PACKET_34_0_2, L_2TAG_PACKET_35_0_2;
-  Label L_2TAG_PACKET_36_0_2, L_2TAG_PACKET_37_0_2, L_2TAG_PACKET_38_0_2, L_2TAG_PACKET_39_0_2;
-  Label L_2TAG_PACKET_40_0_2, L_2TAG_PACKET_41_0_2, L_2TAG_PACKET_42_0_2, L_2TAG_PACKET_43_0_2;
-  Label L_2TAG_PACKET_44_0_2, L_2TAG_PACKET_45_0_2, L_2TAG_PACKET_46_0_2, L_2TAG_PACKET_47_0_2;
-  Label L_2TAG_PACKET_48_0_2, L_2TAG_PACKET_49_0_2, L_2TAG_PACKET_50_0_2, L_2TAG_PACKET_51_0_2;
-  Label L_2TAG_PACKET_52_0_2, L_2TAG_PACKET_53_0_2, L_2TAG_PACKET_54_0_2, L_2TAG_PACKET_55_0_2;
-  Label L_2TAG_PACKET_56_0_2, L_2TAG_PACKET_57_0_2, L_2TAG_PACKET_58_0_2, start;
-
-  assert_different_registers(tmp, eax, ecx, edx);
-
-  address static_const_table_pow = (address)_static_const_table_pow;
-
-  bind(start);
-  subl(rsp, 120);
-  movl(Address(rsp, 64), tmp);
-  lea(tmp, ExternalAddress(static_const_table_pow));
-  movsd(xmm0, Address(rsp, 128));
-  movsd(xmm1, Address(rsp, 136));
-  xorpd(xmm2, xmm2);
-  movl(eax, 16368);
-  pinsrw(xmm2, eax, 3);
-  movl(ecx, 1069088768);
-  movdl(xmm7, ecx);
-  movsd(Address(rsp, 16), xmm1);
-  xorpd(xmm1, xmm1);
-  movl(edx, 30704);
-  pinsrw(xmm1, edx, 3);
-  movsd(Address(rsp, 8), xmm0);
-  movdqu(xmm3, xmm0);
-  movl(edx, 8192);
-  movdl(xmm4, edx);
-  movdqu(xmm6, Address(tmp, 8240));
-  pextrw(eax, xmm0, 3);
-  por(xmm0, xmm2);
-  psllq(xmm0, 5);
-  movsd(xmm2, Address(tmp, 8256));
-  psrlq(xmm0, 34);
-  movl(edx, eax);
-  andl(edx, 32752);
-  subl(edx, 16368);
-  movl(ecx, edx);
-  sarl(edx, 31);
-  addl(ecx, edx);
-  xorl(ecx, edx);
-  rcpss(xmm0, xmm0);
-  psllq(xmm3, 12);
-  addl(ecx, 16);
-  bsrl(ecx, ecx);
-  psrlq(xmm3, 12);
-  movl(Address(rsp, 24), rsi);
-  subl(eax, 16);
-  cmpl(eax, 32736);
-  jcc(Assembler::aboveEqual, L_2TAG_PACKET_0_0_2);
-  movl(rsi, 0);
-
-  bind(L_2TAG_PACKET_1_0_2);
-  mulss(xmm0, xmm7);
-  movl(edx, -1);
-  subl(ecx, 4);
-  shll(edx);
-  movdl(xmm5, edx);
-  por(xmm3, xmm1);
-  subl(eax, 16351);
-  cmpl(eax, 1);
-  jcc(Assembler::belowEqual, L_2TAG_PACKET_2_0_2);
-  paddd(xmm0, xmm4);
-  psllq(xmm5, 32);
-  movdl(edx, xmm0);
-  psllq(xmm0, 29);
-  pand(xmm5, xmm3);
-
-  bind(L_2TAG_PACKET_3_0_2);
-  pand(xmm0, xmm6);
-  subsd(xmm3, xmm5);
-  subl(eax, 1);
-  sarl(eax, 4);
-  cvtsi2sdl(xmm7, eax);
-  mulpd(xmm5, xmm0);
-
-  bind(L_2TAG_PACKET_4_0_2);
-  mulsd(xmm3, xmm0);
-  movdqu(xmm1, Address(tmp, 8272));
-  subsd(xmm5, xmm2);
-  movdqu(xmm4, Address(tmp, 8288));
-  movl(ecx, eax);
-  sarl(eax, 31);
-  addl(ecx, eax);
-  xorl(eax, ecx);
-  addl(eax, 1);
-  bsrl(eax, eax);
-  unpcklpd(xmm5, xmm3);
-  movdqu(xmm6, Address(tmp, 8304));
-  addsd(xmm3, xmm5);
-  andl(edx, 16760832);
-  shrl(edx, 10);
-  addpd(xmm5, Address(tmp, edx, Address::times_1, -3616));
-  movdqu(xmm0, Address(tmp, 8320));
-  pshufd(xmm2, xmm3, 68);
-  mulsd(xmm3, xmm3);
-  mulpd(xmm1, xmm2);
-  mulpd(xmm4, xmm2);
-  addsd(xmm5, xmm7);
-  mulsd(xmm2, xmm3);
-  addpd(xmm6, xmm1);
-  mulsd(xmm3, xmm3);
-  addpd(xmm0, xmm4);
-  movsd(xmm1, Address(rsp, 16));
-  movzwl(ecx, Address(rsp, 22));
-  pshufd(xmm7, xmm5, 238);
-  movsd(xmm4, Address(tmp, 8368));
-  mulpd(xmm6, xmm2);
-  pshufd(xmm3, xmm3, 68);
-  mulpd(xmm0, xmm2);
-  shll(eax, 4);
-  subl(eax, 15872);
-  andl(ecx, 32752);
-  addl(eax, ecx);
-  mulpd(xmm3, xmm6);
-  cmpl(eax, 624);
-  jcc(Assembler::aboveEqual, L_2TAG_PACKET_5_0_2);
-  xorpd(xmm6, xmm6);
-  movl(edx, 17080);
-  pinsrw(xmm6, edx, 3);
-  movdqu(xmm2, xmm1);
-  pand(xmm4, xmm1);
-  subsd(xmm1, xmm4);
-  mulsd(xmm4, xmm5);
-  addsd(xmm0, xmm7);
-  mulsd(xmm1, xmm5);
-  movdqu(xmm7, xmm6);
-  addsd(xmm6, xmm4);
-  addpd(xmm3, xmm0);
-  movdl(edx, xmm6);
-  subsd(xmm6, xmm7);
-  pshufd(xmm0, xmm3, 238);
-  subsd(xmm4, xmm6);
-  addsd(xmm0, xmm3);
-  movl(ecx, edx);
-  andl(edx, 255);
-  addl(edx, edx);
-  movdqu(xmm5, Address(tmp, edx, Address::times_8, 8384));
-  addsd(xmm4, xmm1);
-  mulsd(xmm2, xmm0);
-  movdqu(xmm7, Address(tmp, 12480));
-  movdqu(xmm3, Address(tmp, 12496));
-  shll(ecx, 12);
-  xorl(ecx, rsi);
-  andl(ecx, -1048576);
-  movdl(xmm6, ecx);
-  addsd(xmm2, xmm4);
-  movsd(xmm1, Address(tmp, 12512));
-  pshufd(xmm0, xmm2, 68);
-  pshufd(xmm4, xmm2, 68);
-  mulpd(xmm0, xmm0);
-  movl(rsi, Address(rsp, 24));
-  mulpd(xmm7, xmm4);
-  pshufd(xmm6, xmm6, 17);
-  mulsd(xmm1, xmm2);
-  mulsd(xmm0, xmm0);
-  paddd(xmm5, xmm6);
-  addpd(xmm3, xmm7);
-  mulsd(xmm1, xmm5);
-  pshufd(xmm6, xmm5, 238);
-  mulpd(xmm0, xmm3);
-  addsd(xmm1, xmm6);
-  pshufd(xmm3, xmm0, 238);
-  mulsd(xmm0, xmm5);
-  mulsd(xmm3, xmm5);
-  addsd(xmm0, xmm1);
-  addsd(xmm0, xmm3);
-  addsd(xmm0, xmm5);
-  movsd(Address(rsp, 0), xmm0);
-  fld_d(Address(rsp, 0));
-  jmp(L_2TAG_PACKET_6_0_2);
-
-  bind(L_2TAG_PACKET_7_0_2);
-  movsd(xmm0, Address(rsp, 128));
-  movsd(xmm1, Address(rsp, 136));
-  mulsd(xmm0, xmm1);
-  movsd(Address(rsp, 0), xmm0);
-  fld_d(Address(rsp, 0));
-  jmp(L_2TAG_PACKET_6_0_2);
-
-  bind(L_2TAG_PACKET_0_0_2);
-  addl(eax, 16);
-  movl(edx, 32752);
-  andl(edx, eax);
-  cmpl(edx, 32752);
-  jcc(Assembler::equal, L_2TAG_PACKET_8_0_2);
-  testl(eax, 32768);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_9_0_2);
-
-  bind(L_2TAG_PACKET_10_0_2);
-  movl(ecx, Address(rsp, 16));
-  xorl(edx, edx);
-  testl(ecx, ecx);
-  movl(ecx, 1);
-  cmovl(Assembler::notEqual, edx, ecx);
-  orl(edx, Address(rsp, 20));
-  cmpl(edx, 1072693248);
-  jcc(Assembler::equal, L_2TAG_PACKET_7_0_2);
-  movsd(xmm0, Address(rsp, 8));
-  movsd(xmm3, Address(rsp, 8));
-  movdl(edx, xmm3);
-  psrlq(xmm3, 32);
-  movdl(ecx, xmm3);
-  orl(edx, ecx);
-  cmpl(edx, 0);
-  jcc(Assembler::equal, L_2TAG_PACKET_11_0_2);
-  xorpd(xmm3, xmm3);
-  movl(eax, 18416);
-  pinsrw(xmm3, eax, 3);
-  mulsd(xmm0, xmm3);
-  xorpd(xmm2, xmm2);
-  movl(eax, 16368);
-  pinsrw(xmm2, eax, 3);
-  movdqu(xmm3, xmm0);
-  pextrw(eax, xmm0, 3);
-  por(xmm0, xmm2);
-  movl(ecx, 18416);
-  psllq(xmm0, 5);
-  movsd(xmm2, Address(tmp, 8256));
-  psrlq(xmm0, 34);
-  rcpss(xmm0, xmm0);
-  psllq(xmm3, 12);
-  movdqu(xmm6, Address(tmp, 8240));
-  psrlq(xmm3, 12);
-  mulss(xmm0, xmm7);
-  movl(edx, -1024);
-  movdl(xmm5, edx);
-  por(xmm3, xmm1);
-  paddd(xmm0, xmm4);
-  psllq(xmm5, 32);
-  movdl(edx, xmm0);
-  psllq(xmm0, 29);
-  pand(xmm5, xmm3);
-  movl(rsi, 0);
-  pand(xmm0, xmm6);
-  subsd(xmm3, xmm5);
-  andl(eax, 32752);
-  subl(eax, 18416);
-  sarl(eax, 4);
-  cvtsi2sdl(xmm7, eax);
-  mulpd(xmm5, xmm0);
-  jmp(L_2TAG_PACKET_4_0_2);
-
-  bind(L_2TAG_PACKET_12_0_2);
-  movl(ecx, Address(rsp, 16));
-  xorl(edx, edx);
-  testl(ecx, ecx);
-  movl(ecx, 1);
-  cmovl(Assembler::notEqual, edx, ecx);
-  orl(edx, Address(rsp, 20));
-  cmpl(edx, 1072693248);
-  jcc(Assembler::equal, L_2TAG_PACKET_7_0_2);
-  movsd(xmm0, Address(rsp, 8));
-  movsd(xmm3, Address(rsp, 8));
-  movdl(edx, xmm3);
-  psrlq(xmm3, 32);
-  movdl(ecx, xmm3);
-  orl(edx, ecx);
-  cmpl(edx, 0);
-  jcc(Assembler::equal, L_2TAG_PACKET_11_0_2);
-  xorpd(xmm3, xmm3);
-  movl(eax, 18416);
-  pinsrw(xmm3, eax, 3);
-  mulsd(xmm0, xmm3);
-  xorpd(xmm2, xmm2);
-  movl(eax, 16368);
-  pinsrw(xmm2, eax, 3);
-  movdqu(xmm3, xmm0);
-  pextrw(eax, xmm0, 3);
-  por(xmm0, xmm2);
-  movl(ecx, 18416);
-  psllq(xmm0, 5);
-  movsd(xmm2, Address(tmp, 8256));
-  psrlq(xmm0, 34);
-  rcpss(xmm0, xmm0);
-  psllq(xmm3, 12);
-  movdqu(xmm6, Address(tmp, 8240));
-  psrlq(xmm3, 12);
-  mulss(xmm0, xmm7);
-  movl(edx, -1024);
-  movdl(xmm5, edx);
-  por(xmm3, xmm1);
-  paddd(xmm0, xmm4);
-  psllq(xmm5, 32);
-  movdl(edx, xmm0);
-  psllq(xmm0, 29);
-  pand(xmm5, xmm3);
-  movl(rsi, INT_MIN);
-  pand(xmm0, xmm6);
-  subsd(xmm3, xmm5);
-  andl(eax, 32752);
-  subl(eax, 18416);
-  sarl(eax, 4);
-  cvtsi2sdl(xmm7, eax);
-  mulpd(xmm5, xmm0);
-  jmp(L_2TAG_PACKET_4_0_2);
-
-  bind(L_2TAG_PACKET_5_0_2);
-  cmpl(eax, 0);
-  jcc(Assembler::less, L_2TAG_PACKET_13_0_2);
-  cmpl(eax, 752);
-  jcc(Assembler::aboveEqual, L_2TAG_PACKET_14_0_2);
-
-  bind(L_2TAG_PACKET_15_0_2);
-  addsd(xmm0, xmm7);
-  movsd(xmm2, Address(tmp, 12544));
-  addpd(xmm3, xmm0);
-  xorpd(xmm6, xmm6);
-  movl(eax, 17080);
-  pinsrw(xmm6, eax, 3);
-  pshufd(xmm0, xmm3, 238);
-  addsd(xmm0, xmm3);
-  movdqu(xmm3, xmm5);
-  addsd(xmm5, xmm0);
-  movdqu(xmm4, xmm2);
-  subsd(xmm3, xmm5);
-  movdqu(xmm7, xmm5);
-  pand(xmm5, xmm2);
-  movdqu(xmm2, xmm1);
-  pand(xmm4, xmm1);
-  subsd(xmm7, xmm5);
-  addsd(xmm0, xmm3);
-  subsd(xmm1, xmm4);
-  mulsd(xmm4, xmm5);
-  addsd(xmm0, xmm7);
-  mulsd(xmm2, xmm0);
-  movdqu(xmm7, xmm6);
-  mulsd(xmm1, xmm5);
-  addsd(xmm6, xmm4);
-  movdl(eax, xmm6);
-  subsd(xmm6, xmm7);
-  addsd(xmm2, xmm1);
-  movdqu(xmm7, Address(tmp, 12480));
-  movdqu(xmm3, Address(tmp, 12496));
-  subsd(xmm4, xmm6);
-  pextrw(edx, xmm6, 3);
-  movl(ecx, eax);
-  andl(eax, 255);
-  addl(eax, eax);
-  movdqu(xmm5, Address(tmp, eax, Address::times_8, 8384));
-  addsd(xmm2, xmm4);
-  sarl(ecx, 8);
-  movl(eax, ecx);
-  sarl(ecx, 1);
-  subl(eax, ecx);
-  shll(ecx, 20);
-  xorl(ecx, rsi);
-  movdl(xmm6, ecx);
-  movsd(xmm1, Address(tmp, 12512));
-  andl(edx, 32767);
-  cmpl(edx, 16529);
-  jcc(Assembler::above, L_2TAG_PACKET_14_0_2);
-  pshufd(xmm0, xmm2, 68);
-  pshufd(xmm4, xmm2, 68);
-  mulpd(xmm0, xmm0);
-  mulpd(xmm7, xmm4);
-  pshufd(xmm6, xmm6, 17);
-  mulsd(xmm1, xmm2);
-  mulsd(xmm0, xmm0);
-  paddd(xmm5, xmm6);
-  addpd(xmm3, xmm7);
-  mulsd(xmm1, xmm5);
-  pshufd(xmm6, xmm5, 238);
-  mulpd(xmm0, xmm3);
-  addsd(xmm1, xmm6);
-  pshufd(xmm3, xmm0, 238);
-  mulsd(xmm0, xmm5);
-  mulsd(xmm3, xmm5);
-  shll(eax, 4);
-  xorpd(xmm4, xmm4);
-  addl(eax, 16368);
-  pinsrw(xmm4, eax, 3);
-  addsd(xmm0, xmm1);
-  movl(rsi, Address(rsp, 24));
-  addsd(xmm0, xmm3);
-  movdqu(xmm1, xmm0);
-  addsd(xmm0, xmm5);
-  mulsd(xmm0, xmm4);
-  pextrw(eax, xmm0, 3);
-  andl(eax, 32752);
-  jcc(Assembler::equal, L_2TAG_PACKET_16_0_2);
-  cmpl(eax, 32752);
-  jcc(Assembler::equal, L_2TAG_PACKET_17_0_2);
-
-  bind(L_2TAG_PACKET_18_0_2);
-  movsd(Address(rsp, 0), xmm0);
-  fld_d(Address(rsp, 0));
-  jmp(L_2TAG_PACKET_6_0_2);
-
-  bind(L_2TAG_PACKET_8_0_2);
-  movsd(xmm1, Address(rsp, 16));
-  movsd(xmm0, Address(rsp, 8));
-  movdqu(xmm2, xmm0);
-  movdl(eax, xmm2);
-  psrlq(xmm2, 20);
-  movdl(edx, xmm2);
-  orl(eax, edx);
-  jcc(Assembler::equal, L_2TAG_PACKET_19_0_2);
-  addsd(xmm0, xmm0);
-  movdl(eax, xmm1);
-  psrlq(xmm1, 32);
-  movdl(edx, xmm1);
-  movl(ecx, edx);
-  addl(edx, edx);
-  orl(eax, edx);
-  jcc(Assembler::equal, L_2TAG_PACKET_20_0_2);
-  jmp(L_2TAG_PACKET_18_0_2);
-
-  bind(L_2TAG_PACKET_20_0_2);
-  xorpd(xmm0, xmm0);
-  movl(eax, 16368);
-  pinsrw(xmm0, eax, 3);
-  movl(edx, 29);
-  jmp(L_2TAG_PACKET_21_0_2);
-
-  bind(L_2TAG_PACKET_22_0_2);
-  movsd(xmm0, Address(rsp, 16));
-  addpd(xmm0, xmm0);
-  jmp(L_2TAG_PACKET_18_0_2);
-
-  bind(L_2TAG_PACKET_19_0_2);
-  movdl(eax, xmm1);
-  movdqu(xmm2, xmm1);
-  psrlq(xmm1, 32);
-  movdl(edx, xmm1);
-  movl(ecx, edx);
-  addl(edx, edx);
-  orl(eax, edx);
-  jcc(Assembler::equal, L_2TAG_PACKET_23_0_2);
-  pextrw(eax, xmm2, 3);
-  andl(eax, 32752);
-  cmpl(eax, 32752);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_24_0_2);
-  movdl(eax, xmm2);
-  psrlq(xmm2, 20);
-  movdl(edx, xmm2);
-  orl(eax, edx);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_22_0_2);
-
-  bind(L_2TAG_PACKET_24_0_2);
-  pextrw(eax, xmm0, 3);
-  testl(eax, 32768);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_25_0_2);
-  testl(ecx, INT_MIN);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_26_0_2);
-  jmp(L_2TAG_PACKET_18_0_2);
-
-  bind(L_2TAG_PACKET_27_0_2);
-  movsd(xmm1, Address(rsp, 16));
-  movdl(eax, xmm1);
-  testl(eax, 1);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_28_0_2);
-  testl(eax, 2);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_29_0_2);
-  jmp(L_2TAG_PACKET_28_0_2);
-
-  bind(L_2TAG_PACKET_25_0_2);
-  shrl(ecx, 20);
-  andl(ecx, 2047);
-  cmpl(ecx, 1075);
-  jcc(Assembler::above, L_2TAG_PACKET_28_0_2);
-  jcc(Assembler::equal, L_2TAG_PACKET_30_0_2);
-  cmpl(ecx, 1074);
-  jcc(Assembler::above, L_2TAG_PACKET_27_0_2);
-  cmpl(ecx, 1023);
-  jcc(Assembler::below, L_2TAG_PACKET_28_0_2);
-  movsd(xmm1, Address(rsp, 16));
-  movl(eax, 17208);
-  xorpd(xmm3, xmm3);
-  pinsrw(xmm3, eax, 3);
-  movdqu(xmm4, xmm3);
-  addsd(xmm3, xmm1);
-  subsd(xmm4, xmm3);
-  addsd(xmm1, xmm4);
-  pextrw(eax, xmm1, 3);
-  andl(eax, 32752);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_28_0_2);
-  movdl(eax, xmm3);
-  andl(eax, 1);
-  jcc(Assembler::equal, L_2TAG_PACKET_28_0_2);
-
-  bind(L_2TAG_PACKET_29_0_2);
-  movsd(xmm1, Address(rsp, 16));
-  pextrw(eax, xmm1, 3);
-  andl(eax, 32768);
-  jcc(Assembler::equal, L_2TAG_PACKET_18_0_2);
-  xorpd(xmm0, xmm0);
-  movl(eax, 32768);
-  pinsrw(xmm0, eax, 3);
-  jmp(L_2TAG_PACKET_18_0_2);
-
-  bind(L_2TAG_PACKET_28_0_2);
-  movsd(xmm1, Address(rsp, 16));
-  pextrw(eax, xmm1, 3);
-  andl(eax, 32768);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_26_0_2);
-
-  bind(L_2TAG_PACKET_31_0_2);
-  xorpd(xmm0, xmm0);
-  movl(eax, 32752);
-  pinsrw(xmm0, eax, 3);
-  jmp(L_2TAG_PACKET_18_0_2);
-
-  bind(L_2TAG_PACKET_30_0_2);
-  movsd(xmm1, Address(rsp, 16));
-  movdl(eax, xmm1);
-  andl(eax, 1);
-  jcc(Assembler::equal, L_2TAG_PACKET_28_0_2);
-  jmp(L_2TAG_PACKET_29_0_2);
-
-  bind(L_2TAG_PACKET_32_0_2);
-  movdl(eax, xmm1);
-  psrlq(xmm1, 20);
-  movdl(edx, xmm1);
-  orl(eax, edx);
-  jcc(Assembler::equal, L_2TAG_PACKET_33_0_2);
-  movsd(xmm0, Address(rsp, 16));
-  addsd(xmm0, xmm0);
-  jmp(L_2TAG_PACKET_18_0_2);
-
-  bind(L_2TAG_PACKET_33_0_2);
-  movsd(xmm0, Address(rsp, 8));
-  pextrw(eax, xmm0, 3);
-  cmpl(eax, 49136);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_34_0_2);
-  movdl(ecx, xmm0);
-  psrlq(xmm0, 20);
-  movdl(edx, xmm0);
-  orl(ecx, edx);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_34_0_2);
-  xorpd(xmm0, xmm0);
-  movl(eax, 32760);
-  pinsrw(xmm0, eax, 3);
-  jmp(L_2TAG_PACKET_18_0_2);
-
-  bind(L_2TAG_PACKET_34_0_2);
-  movsd(xmm1, Address(rsp, 16));
-  andl(eax, 32752);
-  subl(eax, 16368);
-  pextrw(edx, xmm1, 3);
-  xorpd(xmm0, xmm0);
-  xorl(eax, edx);
-  andl(eax, 32768);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_18_0_2);
-  movl(ecx, 32752);
-  pinsrw(xmm0, ecx, 3);
-  jmp(L_2TAG_PACKET_18_0_2);
-
-  bind(L_2TAG_PACKET_35_0_2);
-  movdl(eax, xmm1);
-  cmpl(edx, 17184);
-  jcc(Assembler::above, L_2TAG_PACKET_36_0_2);
-  testl(eax, 1);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_37_0_2);
-  testl(eax, 2);
-  jcc(Assembler::equal, L_2TAG_PACKET_38_0_2);
-  jmp(L_2TAG_PACKET_39_0_2);
-
-  bind(L_2TAG_PACKET_36_0_2);
-  testl(eax, 1);
-  jcc(Assembler::equal, L_2TAG_PACKET_38_0_2);
-  jmp(L_2TAG_PACKET_39_0_2);
-
-  bind(L_2TAG_PACKET_9_0_2);
-  movsd(xmm2, Address(rsp, 8));
-  movdl(eax, xmm2);
-  psrlq(xmm2, 31);
-  movdl(ecx, xmm2);
-  orl(eax, ecx);
-  jcc(Assembler::equal, L_2TAG_PACKET_11_0_2);
-  movsd(xmm1, Address(rsp, 16));
-  pextrw(edx, xmm1, 3);
-  movdl(eax, xmm1);
-  movdqu(xmm2, xmm1);
-  psrlq(xmm2, 32);
-  movdl(ecx, xmm2);
-  addl(ecx, ecx);
-  orl(ecx, eax);
-  jcc(Assembler::equal, L_2TAG_PACKET_40_0_2);
-  andl(edx, 32752);
-  cmpl(edx, 32752);
-  jcc(Assembler::equal, L_2TAG_PACKET_32_0_2);
-  cmpl(edx, 17200);
-  jcc(Assembler::above, L_2TAG_PACKET_38_0_2);
-  cmpl(edx, 17184);
-  jcc(Assembler::aboveEqual, L_2TAG_PACKET_35_0_2);
-  cmpl(edx, 16368);
-  jcc(Assembler::below, L_2TAG_PACKET_37_0_2);
-  movl(eax, 17208);
-  xorpd(xmm2, xmm2);
-  pinsrw(xmm2, eax, 3);
-  movdqu(xmm4, xmm2);
-  addsd(xmm2, xmm1);
-  subsd(xmm4, xmm2);
-  addsd(xmm1, xmm4);
-  pextrw(eax, xmm1, 3);
-  andl(eax, 32767);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_37_0_2);
-  movdl(eax, xmm2);
-  andl(eax, 1);
-  jcc(Assembler::equal, L_2TAG_PACKET_38_0_2);
-
-  bind(L_2TAG_PACKET_39_0_2);
-  xorpd(xmm1, xmm1);
-  movl(edx, 30704);
-  pinsrw(xmm1, edx, 3);
-  movsd(xmm2, Address(tmp, 8256));
-  movsd(xmm4, Address(rsp, 8));
-  pextrw(eax, xmm4, 3);
-  movl(edx, 8192);
-  movdl(xmm4, edx);
-  andl(eax, 32767);
-  subl(eax, 16);
-  jcc(Assembler::less, L_2TAG_PACKET_12_0_2);
-  movl(edx, eax);
-  andl(edx, 32752);
-  subl(edx, 16368);
-  movl(ecx, edx);
-  sarl(edx, 31);
-  addl(ecx, edx);
-  xorl(ecx, edx);
-  addl(ecx, 16);
-  bsrl(ecx, ecx);
-  movl(rsi, INT_MIN);
-  jmp(L_2TAG_PACKET_1_0_2);
-
-  bind(L_2TAG_PACKET_37_0_2);
-  xorpd(xmm1, xmm1);
-  movl(eax, 32752);
-  pinsrw(xmm1, eax, 3);
-  xorpd(xmm0, xmm0);
-  mulsd(xmm0, xmm1);
-  movl(edx, 28);
-  jmp(L_2TAG_PACKET_21_0_2);
-
-  bind(L_2TAG_PACKET_38_0_2);
-  xorpd(xmm1, xmm1);
-  movl(edx, 30704);
-  pinsrw(xmm1, edx, 3);
-  movsd(xmm2, Address(tmp, 8256));
-  movsd(xmm4, Address(rsp, 8));
-  pextrw(eax, xmm4, 3);
-  movl(edx, 8192);
-  movdl(xmm4, edx);
-  andl(eax, 32767);
-  subl(eax, 16);
-  jcc(Assembler::less, L_2TAG_PACKET_10_0_2);
-  movl(edx, eax);
-  andl(edx, 32752);
-  subl(edx, 16368);
-  movl(ecx, edx);
-  sarl(edx, 31);
-  addl(ecx, edx);
-  xorl(ecx, edx);
-  addl(ecx, 16);
-  bsrl(ecx, ecx);
-  movl(rsi, 0);
-  jmp(L_2TAG_PACKET_1_0_2);
-
-  bind(L_2TAG_PACKET_23_0_2);
-  xorpd(xmm0, xmm0);
-  movl(eax, 16368);
-  pinsrw(xmm0, eax, 3);
-  jmp(L_2TAG_PACKET_18_0_2);
-
-  bind(L_2TAG_PACKET_26_0_2);
-  xorpd(xmm0, xmm0);
-  jmp(L_2TAG_PACKET_18_0_2);
-
-  bind(L_2TAG_PACKET_13_0_2);
-  addl(eax, 384);
-  cmpl(eax, 0);
-  jcc(Assembler::less, L_2TAG_PACKET_41_0_2);
-  mulsd(xmm5, xmm1);
-  addsd(xmm0, xmm7);
-  shrl(rsi, 31);
-  addpd(xmm3, xmm0);
-  pshufd(xmm0, xmm3, 238);
-  addsd(xmm3, xmm0);
-  movsd(xmm4, Address(tmp, rsi, Address::times_8, 12528));
-  mulsd(xmm1, xmm3);
-  xorpd(xmm0, xmm0);
-  movl(eax, 16368);
-  shll(rsi, 15);
-  orl(eax, rsi);
-  pinsrw(xmm0, eax, 3);
-  addsd(xmm5, xmm1);
-  movl(rsi, Address(rsp, 24));
-  mulsd(xmm5, xmm4);
-  addsd(xmm0, xmm5);
-  jmp(L_2TAG_PACKET_18_0_2);
-
-  bind(L_2TAG_PACKET_41_0_2);
-  movl(rsi, Address(rsp, 24));
-  xorpd(xmm0, xmm0);
-  movl(eax, 16368);
-  pinsrw(xmm0, eax, 3);
-  jmp(L_2TAG_PACKET_18_0_2);
-
-  bind(L_2TAG_PACKET_40_0_2);
-  xorpd(xmm0, xmm0);
-  movl(eax, 16368);
-  pinsrw(xmm0, eax, 3);
-  jmp(L_2TAG_PACKET_18_0_2);
-
-  bind(L_2TAG_PACKET_42_0_2);
-  xorpd(xmm0, xmm0);
-  movl(eax, 16368);
-  pinsrw(xmm0, eax, 3);
-  movl(edx, 26);
-  jmp(L_2TAG_PACKET_21_0_2);
-
-  bind(L_2TAG_PACKET_11_0_2);
-  movsd(xmm1, Address(rsp, 16));
-  movdqu(xmm2, xmm1);
-  pextrw(eax, xmm1, 3);
-  andl(eax, 32752);
-  cmpl(eax, 32752);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_43_0_2);
-  movdl(eax, xmm2);
-  psrlq(xmm2, 20);
-  movdl(edx, xmm2);
-  orl(eax, edx);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_22_0_2);
-
-  bind(L_2TAG_PACKET_43_0_2);
-  movdl(eax, xmm1);
-  psrlq(xmm1, 32);
-  movdl(edx, xmm1);
-  movl(ecx, edx);
-  addl(edx, edx);
-  orl(eax, edx);
-  jcc(Assembler::equal, L_2TAG_PACKET_42_0_2);
-  shrl(edx, 21);
-  cmpl(edx, 1075);
-  jcc(Assembler::above, L_2TAG_PACKET_44_0_2);
-  jcc(Assembler::equal, L_2TAG_PACKET_45_0_2);
-  cmpl(edx, 1023);
-  jcc(Assembler::below, L_2TAG_PACKET_44_0_2);
-  movsd(xmm1, Address(rsp, 16));
-  movl(eax, 17208);
-  xorpd(xmm3, xmm3);
-  pinsrw(xmm3, eax, 3);
-  movdqu(xmm4, xmm3);
-  addsd(xmm3, xmm1);
-  subsd(xmm4, xmm3);
-  addsd(xmm1, xmm4);
-  pextrw(eax, xmm1, 3);
-  andl(eax, 32752);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_44_0_2);
-  movdl(eax, xmm3);
-  andl(eax, 1);
-  jcc(Assembler::equal, L_2TAG_PACKET_44_0_2);
-
-  bind(L_2TAG_PACKET_46_0_2);
-  movsd(xmm0, Address(rsp, 8));
-  testl(ecx, INT_MIN);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_47_0_2);
-  jmp(L_2TAG_PACKET_18_0_2);
-
-  bind(L_2TAG_PACKET_45_0_2);
-  movsd(xmm1, Address(rsp, 16));
-  movdl(eax, xmm1);
-  testl(eax, 1);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_46_0_2);
-
-  bind(L_2TAG_PACKET_44_0_2);
-  testl(ecx, INT_MIN);
-  jcc(Assembler::equal, L_2TAG_PACKET_26_0_2);
-  xorpd(xmm0, xmm0);
-
-  bind(L_2TAG_PACKET_47_0_2);
-  movl(eax, 16368);
-  xorpd(xmm1, xmm1);
-  pinsrw(xmm1, eax, 3);
-  divsd(xmm1, xmm0);
-  movdqu(xmm0, xmm1);
-  movl(edx, 27);
-  jmp(L_2TAG_PACKET_21_0_2);
-
-  bind(L_2TAG_PACKET_14_0_2);
-  movsd(xmm2, Address(rsp, 8));
-  movsd(xmm6, Address(rsp, 16));
-  pextrw(eax, xmm2, 3);
-  pextrw(edx, xmm6, 3);
-  movl(ecx, 32752);
-  andl(ecx, edx);
-  cmpl(ecx, 32752);
-  jcc(Assembler::equal, L_2TAG_PACKET_48_0_2);
-  andl(eax, 32752);
-  subl(eax, 16368);
-  xorl(edx, eax);
-  testl(edx, 32768);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_49_0_2);
-
-  bind(L_2TAG_PACKET_50_0_2);
-  movl(eax, 32736);
-  pinsrw(xmm0, eax, 3);
-  shrl(rsi, 16);
-  orl(eax, rsi);
-  pinsrw(xmm1, eax, 3);
-  movl(rsi, Address(rsp, 24));
-  mulsd(xmm0, xmm1);
-
-  bind(L_2TAG_PACKET_17_0_2);
-  movl(edx, 24);
-
-  bind(L_2TAG_PACKET_21_0_2);
-  movsd(Address(rsp, 0), xmm0);
-  fld_d(Address(rsp, 0));
-  jmp(L_2TAG_PACKET_6_0_2);
-
-  bind(L_2TAG_PACKET_49_0_2);
-  movl(eax, 16);
-  pinsrw(xmm0, eax, 3);
-  mulsd(xmm0, xmm0);
-  testl(rsi, INT_MIN);
-  jcc(Assembler::equal, L_2TAG_PACKET_51_0_2);
-  movsd(xmm2, Address(tmp, 12560));
-  xorpd(xmm0, xmm2);
-
-  bind(L_2TAG_PACKET_51_0_2);
-  movl(rsi, Address(rsp, 24));
-  movl(edx, 25);
-  jmp(L_2TAG_PACKET_21_0_2);
-
-  bind(L_2TAG_PACKET_16_0_2);
-  pextrw(ecx, xmm5, 3);
-  pextrw(edx, xmm4, 3);
-  movl(eax, -1);
-  andl(ecx, 32752);
-  subl(ecx, 16368);
-  andl(edx, 32752);
-  addl(edx, ecx);
-  movl(ecx, -31);
-  sarl(edx, 4);
-  subl(ecx, edx);
-  jcc(Assembler::lessEqual, L_2TAG_PACKET_52_0_2);
-  cmpl(ecx, 20);
-  jcc(Assembler::above, L_2TAG_PACKET_53_0_2);
-  shll(eax);
-
-  bind(L_2TAG_PACKET_52_0_2);
-  movdl(xmm0, eax);
-  psllq(xmm0, 32);
-  pand(xmm0, xmm5);
-  subsd(xmm5, xmm0);
-  addsd(xmm5, xmm1);
-  mulsd(xmm0, xmm4);
-  mulsd(xmm5, xmm4);
-  addsd(xmm0, xmm5);
-
-  bind(L_2TAG_PACKET_53_0_2);
-  movl(edx, 25);
-  jmp(L_2TAG_PACKET_21_0_2);
-
-  bind(L_2TAG_PACKET_2_0_2);
-  movzwl(ecx, Address(rsp, 22));
-  movl(edx, INT_MIN);
-  movdl(xmm1, edx);
-  xorpd(xmm7, xmm7);
-  paddd(xmm0, xmm4);
-  psllq(xmm5, 32);
-  movdl(edx, xmm0);
-  psllq(xmm0, 29);
-  paddq(xmm1, xmm3);
-  pand(xmm5, xmm1);
-  andl(ecx, 32752);
-  cmpl(ecx, 16560);
-  jcc(Assembler::below, L_2TAG_PACKET_3_0_2);
-  pand(xmm0, xmm6);
-  subsd(xmm3, xmm5);
-  addl(eax, 16351);
-  shrl(eax, 4);
-  subl(eax, 1022);
-  cvtsi2sdl(xmm7, eax);
-  mulpd(xmm5, xmm0);
-  movsd(xmm4, Address(tmp, 0));
-  mulsd(xmm3, xmm0);
-  movsd(xmm6, Address(tmp, 0));
-  subsd(xmm5, xmm2);
-  movsd(xmm1, Address(tmp, 8));
-  pshufd(xmm2, xmm3, 68);
-  unpcklpd(xmm5, xmm3);
-  addsd(xmm3, xmm5);
-  movsd(xmm0, Address(tmp, 8));
-  andl(edx, 16760832);
-  shrl(edx, 10);
-  addpd(xmm7, Address(tmp, edx, Address::times_1, -3616));
-  mulsd(xmm4, xmm5);
-  mulsd(xmm0, xmm5);
-  mulsd(xmm6, xmm2);
-  mulsd(xmm1, xmm2);
-  movdqu(xmm2, xmm5);
-  mulsd(xmm4, xmm5);
-  addsd(xmm5, xmm0);
-  movdqu(xmm0, xmm7);
-  addsd(xmm2, xmm3);
-  addsd(xmm7, xmm5);
-  mulsd(xmm6, xmm2);
-  subsd(xmm0, xmm7);
-  movdqu(xmm2, xmm7);
-  addsd(xmm7, xmm4);
-  addsd(xmm0, xmm5);
-  subsd(xmm2, xmm7);
-  addsd(xmm4, xmm2);
-  pshufd(xmm2, xmm5, 238);
-  movdqu(xmm5, xmm7);
-  addsd(xmm7, xmm2);
-  addsd(xmm4, xmm0);
-  movdqu(xmm0, Address(tmp, 8272));
-  subsd(xmm5, xmm7);
-  addsd(xmm6, xmm4);
-  movdqu(xmm4, xmm7);
-  addsd(xmm5, xmm2);
-  addsd(xmm7, xmm1);
-  movdqu(xmm2, Address(tmp, 8336));
-  subsd(xmm4, xmm7);
-  addsd(xmm6, xmm5);
-  addsd(xmm4, xmm1);
-  pshufd(xmm5, xmm7, 238);
-  movdqu(xmm1, xmm7);
-  addsd(xmm7, xmm5);
-  subsd(xmm1, xmm7);
-  addsd(xmm1, xmm5);
-  movdqu(xmm5, Address(tmp, 8352));
-  pshufd(xmm3, xmm3, 68);
-  addsd(xmm6, xmm4);
-  addsd(xmm6, xmm1);
-  movdqu(xmm1, Address(tmp, 8304));
-  mulpd(xmm0, xmm3);
-  mulpd(xmm2, xmm3);
-  pshufd(xmm4, xmm3, 68);
-  mulpd(xmm3, xmm3);
-  addpd(xmm0, xmm1);
-  addpd(xmm5, xmm2);
-  mulsd(xmm4, xmm3);
-  movsd(xmm2, Address(tmp, 16));
-  mulpd(xmm3, xmm3);
-  movsd(xmm1, Address(rsp, 16));
-  movzwl(ecx, Address(rsp, 22));
-  mulpd(xmm0, xmm4);
-  pextrw(eax, xmm7, 3);
-  mulpd(xmm5, xmm4);
-  mulpd(xmm0, xmm3);
-  movsd(xmm4, Address(tmp, 8376));
-  pand(xmm2, xmm7);
-  addsd(xmm5, xmm6);
-  subsd(xmm7, xmm2);
-  addpd(xmm5, xmm0);
-  andl(eax, 32752);
-  subl(eax, 16368);
-  andl(ecx, 32752);
-  cmpl(ecx, 32752);
-  jcc(Assembler::equal, L_2TAG_PACKET_48_0_2);
-  addl(ecx, eax);
-  cmpl(ecx, 16576);
-  jcc(Assembler::aboveEqual, L_2TAG_PACKET_54_0_2);
-  pshufd(xmm0, xmm5, 238);
-  pand(xmm4, xmm1);
-  movdqu(xmm3, xmm1);
-  addsd(xmm5, xmm0);
-  subsd(xmm1, xmm4);
-  xorpd(xmm6, xmm6);
-  movl(edx, 17080);
-  pinsrw(xmm6, edx, 3);
-  addsd(xmm7, xmm5);
-  mulsd(xmm4, xmm2);
-  mulsd(xmm1, xmm2);
-  movdqu(xmm5, xmm6);
-  mulsd(xmm3, xmm7);
-  addsd(xmm6, xmm4);
-  addsd(xmm1, xmm3);
-  movdqu(xmm7, Address(tmp, 12480));
-  movdl(edx, xmm6);
-  subsd(xmm6, xmm5);
-  movdqu(xmm3, Address(tmp, 12496));
-  movsd(xmm2, Address(tmp, 12512));
-  subsd(xmm4, xmm6);
-  movl(ecx, edx);
-  andl(edx, 255);
-  addl(edx, edx);
-  movdqu(xmm5, Address(tmp, edx, Address::times_8, 8384));
-  addsd(xmm4, xmm1);
-  pextrw(edx, xmm6, 3);
-  shrl(ecx, 8);
-  movl(eax, ecx);
-  shrl(ecx, 1);
-  subl(eax, ecx);
-  shll(ecx, 20);
-  movdl(xmm6, ecx);
-  pshufd(xmm0, xmm4, 68);
-  pshufd(xmm1, xmm4, 68);
-  mulpd(xmm0, xmm0);
-  mulpd(xmm7, xmm1);
-  pshufd(xmm6, xmm6, 17);
-  mulsd(xmm2, xmm4);
-  andl(edx, 32767);
-  cmpl(edx, 16529);
-  jcc(Assembler::above, L_2TAG_PACKET_14_0_2);
-  mulsd(xmm0, xmm0);
-  paddd(xmm5, xmm6);
-  addpd(xmm3, xmm7);
-  mulsd(xmm2, xmm5);
-  pshufd(xmm6, xmm5, 238);
-  mulpd(xmm0, xmm3);
-  addsd(xmm2, xmm6);
-  pshufd(xmm3, xmm0, 238);
-  addl(eax, 1023);
-  shll(eax, 20);
-  orl(eax, rsi);
-  movdl(xmm4, eax);
-  mulsd(xmm0, xmm5);
-  mulsd(xmm3, xmm5);
-  addsd(xmm0, xmm2);
-  psllq(xmm4, 32);
-  addsd(xmm0, xmm3);
-  movdqu(xmm1, xmm0);
-  addsd(xmm0, xmm5);
-  movl(rsi, Address(rsp, 24));
-  mulsd(xmm0, xmm4);
-  pextrw(eax, xmm0, 3);
-  andl(eax, 32752);
-  jcc(Assembler::equal, L_2TAG_PACKET_16_0_2);
-  cmpl(eax, 32752);
-  jcc(Assembler::equal, L_2TAG_PACKET_17_0_2);
-
-  bind(L_2TAG_PACKET_55_0_2);
-  movsd(Address(rsp, 0), xmm0);
-  fld_d(Address(rsp, 0));
-  jmp(L_2TAG_PACKET_6_0_2);
-
-  bind(L_2TAG_PACKET_48_0_2);
-  movl(rsi, Address(rsp, 24));
-
-  bind(L_2TAG_PACKET_56_0_2);
-  movsd(xmm0, Address(rsp, 8));
-  movsd(xmm1, Address(rsp, 16));
-  addsd(xmm1, xmm1);
-  xorpd(xmm2, xmm2);
-  movl(eax, 49136);
-  pinsrw(xmm2, eax, 3);
-  addsd(xmm2, xmm0);
-  pextrw(eax, xmm2, 3);
-  cmpl(eax, 0);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_57_0_2);
-  xorpd(xmm0, xmm0);
-  movl(eax, 32760);
-  pinsrw(xmm0, eax, 3);
-  jmp(L_2TAG_PACKET_18_0_2);
-
-  bind(L_2TAG_PACKET_57_0_2);
-  movdl(edx, xmm1);
-  movdqu(xmm3, xmm1);
-  psrlq(xmm3, 20);
-  movdl(ecx, xmm3);
-  orl(ecx, edx);
-  jcc(Assembler::equal, L_2TAG_PACKET_58_0_2);
-  addsd(xmm1, xmm1);
-  movdqu(xmm0, xmm1);
-  jmp(L_2TAG_PACKET_18_0_2);
-
-  bind(L_2TAG_PACKET_58_0_2);
-  pextrw(eax, xmm0, 3);
-  andl(eax, 32752);
-  pextrw(edx, xmm1, 3);
-  xorpd(xmm0, xmm0);
-  subl(eax, 16368);
-  xorl(eax, edx);
-  testl(eax, 32768);
-  jcc(Assembler::notEqual, L_2TAG_PACKET_18_0_2);
-  movl(edx, 32752);
-  pinsrw(xmm0, edx, 3);
-  jmp(L_2TAG_PACKET_18_0_2);
-
-  bind(L_2TAG_PACKET_54_0_2);
-  pextrw(eax, xmm1, 3);
-  pextrw(ecx, xmm2, 3);
-  xorl(eax, ecx);
-  testl(eax, 32768);
-  jcc(Assembler::equal, L_2TAG_PACKET_50_0_2);
-  jmp(L_2TAG_PACKET_49_0_2);
-
-  bind(L_2TAG_PACKET_6_0_2);
-  movl(tmp, Address(rsp, 64));
-
-}
-
-#endif // !_LP64
--- a/hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -2103,22 +2103,6 @@
       __ ret(0);
     }
     {
-      StubCodeMark mark(this, "StubRoutines", "sin");
-      StubRoutines::_intrinsic_sin = (double (*)(double))  __ pc();
-
-      __ fld_d(Address(rsp, 4));
-      __ trigfunc('s');
-      __ ret(0);
-    }
-    {
-      StubCodeMark mark(this, "StubRoutines", "cos");
-      StubRoutines::_intrinsic_cos = (double (*)(double)) __ pc();
-
-      __ fld_d(Address(rsp, 4));
-      __ trigfunc('c');
-      __ ret(0);
-    }
-    {
       StubCodeMark mark(this, "StubRoutines", "tan");
       StubRoutines::_intrinsic_tan = (double (*)(double)) __ pc();
 
@@ -2802,8 +2786,7 @@
     const Register to          = rdx;      // destination array address
     const Register key         = rcx;      // key array address
     const Register counter     = rdi;      // counter byte array initialized from initvector array address
-
-    // and left with the results of the last encryption block
+                                           // and updated with the incremented counter in the end
     const Register len_reg     = rbx;
     const Register pos         = rax;
 
@@ -2829,10 +2812,7 @@
 
     __ movptr(from , from_param);
     __ movptr(to   , to_param);
-    //__ movptr(key, key_param);
-    //__ movptr(counter, rvec_param);
     __ movptr(len_reg , len_param);
-    //__ movptr(pos, 0);
 
     // Use the partially used encrpyted counter from last invocation
     Label L_exit_preLoop, L_preLoop_start;
@@ -3007,8 +2987,8 @@
         __ subptr(len_reg, AESBlockSize);
         __ jmp(L_singleBlockLoopTop[k]);
 
-      __ BIND(L_processTail_insr[k]);
-        __ addptr(pos, len_reg);
+      __ BIND(L_processTail_insr[k]);                                               // Process the tail part of the input array
+        __ addptr(pos, len_reg);                                                    // 1. Insert bytes from src array into xmm_from0 register
         __ testptr(len_reg, 8);
         __ jcc(Assembler::zero, L_processTail_4_insr[k]);
           __ subptr(pos,8);
@@ -3035,11 +3015,11 @@
         __ BIND(L_processTail_exit_insr[k]);
 
         __ movptr(saved_encCounter_start, saved_counter_param);
-        __ movdqu(Address(saved_encCounter_start, 0), xmm_result0);
-        __ pxor(xmm_result0, xmm_from0);
+        __ movdqu(Address(saved_encCounter_start, 0), xmm_result0);               // 2. Perform pxor of the encrypted counter and plaintext Bytes.
+        __ pxor(xmm_result0, xmm_from0);                                          //    Also the encrypted counter is saved for next invocation.
 
         __ testptr(len_reg, 8);
-        __ jcc(Assembler::zero, L_processTail_4_extr[k]);
+        __ jcc(Assembler::zero, L_processTail_4_extr[k]);                        // 3. Extract bytes from xmm_result0 into the dest. array
           __ pextrd(Address(to, pos), xmm_result0, 0);
           __ pextrd(Address(to, pos, Address::times_1, 4), xmm_result0, 1);
           __ psrldq(xmm_result0, 8);
@@ -3445,6 +3425,76 @@
 
  }
 
+ address generate_libm_reduce_pi04l() {
+   address start = __ pc();
+
+   BLOCK_COMMENT("Entry:");
+   __ libm_reduce_pi04l(rax, rcx, rdx, rbx, rsi, rdi, rbp, rsp);
+
+   return start;
+
+ }
+
+ address generate_libm_sin_cos_huge() {
+   address start = __ pc();
+
+   const XMMRegister x0 = xmm0;
+   const XMMRegister x1 = xmm1;
+
+   BLOCK_COMMENT("Entry:");
+   __ libm_sincos_huge(x0, x1, rax, rcx, rdx, rbx, rsi, rdi, rbp, rsp);
+
+   return start;
+
+ }
+
+ address generate_libmSin() {
+   address start = __ pc();
+
+   const XMMRegister x0 = xmm0;
+   const XMMRegister x1 = xmm1;
+   const XMMRegister x2 = xmm2;
+   const XMMRegister x3 = xmm3;
+
+   const XMMRegister x4 = xmm4;
+   const XMMRegister x5 = xmm5;
+   const XMMRegister x6 = xmm6;
+   const XMMRegister x7 = xmm7;
+
+   BLOCK_COMMENT("Entry:");
+   __ enter(); // required for proper stackwalking of RuntimeStub frame
+   __ fast_sin(x0, x1, x2, x3, x4, x5, x6, x7, rax, rbx, rdx);
+   __ leave(); // required for proper stackwalking of RuntimeStub frame
+   __ ret(0);
+
+   return start;
+
+ }
+
+ address generate_libmCos() {
+   address start = __ pc();
+
+   const XMMRegister x0 = xmm0;
+   const XMMRegister x1 = xmm1;
+   const XMMRegister x2 = xmm2;
+   const XMMRegister x3 = xmm3;
+
+   const XMMRegister x4 = xmm4;
+   const XMMRegister x5 = xmm5;
+   const XMMRegister x6 = xmm6;
+   const XMMRegister x7 = xmm7;
+
+   const Register tmp = rbx;
+
+   BLOCK_COMMENT("Entry:");
+   __ enter(); // required for proper stackwalking of RuntimeStub frame
+   __ fast_cos(x0, x1, x2, x3, x4, x5, x6, x7, rax, rcx, rdx, tmp);
+   __ leave(); // required for proper stackwalking of RuntimeStub frame
+   __ ret(0);
+
+   return start;
+
+ }
 
   // Safefetch stubs.
   void generate_safefetch(const char* name, int size, address* entry,
@@ -3673,6 +3723,16 @@
       StubRoutines::_dexp = generate_libmExp();
       StubRoutines::_dlog = generate_libmLog();
       StubRoutines::_dpow = generate_libmPow();
+      if (UseLibmSinIntrinsic || UseLibmCosIntrinsic) {
+        StubRoutines::_dlibm_reduce_pi04l = generate_libm_reduce_pi04l();
+        StubRoutines::_dlibm_sin_cos_huge = generate_libm_sin_cos_huge();
+      }
+      if (UseLibmSinIntrinsic) {
+        StubRoutines::_dsin = generate_libmSin();
+      }
+      if (UseLibmCosIntrinsic) {
+        StubRoutines::_dcos = generate_libmCos();
+      }
     }
   }
 
--- a/hotspot/src/cpu/x86/vm/stubGenerator_x86_64.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/cpu/x86/vm/stubGenerator_x86_64.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -2987,32 +2987,6 @@
       __ ret(0);
     }
     {
-      StubCodeMark mark(this, "StubRoutines", "sin");
-      StubRoutines::_intrinsic_sin = (double (*)(double)) __ pc();
-
-      __ subq(rsp, 8);
-      __ movdbl(Address(rsp, 0), xmm0);
-      __ fld_d(Address(rsp, 0));
-      __ trigfunc('s');
-      __ fstp_d(Address(rsp, 0));
-      __ movdbl(xmm0, Address(rsp, 0));
-      __ addq(rsp, 8);
-      __ ret(0);
-    }
-    {
-      StubCodeMark mark(this, "StubRoutines", "cos");
-      StubRoutines::_intrinsic_cos = (double (*)(double)) __ pc();
-
-      __ subq(rsp, 8);
-      __ movdbl(Address(rsp, 0), xmm0);
-      __ fld_d(Address(rsp, 0));
-      __ trigfunc('c');
-      __ fstp_d(Address(rsp, 0));
-      __ movdbl(xmm0, Address(rsp, 0));
-      __ addq(rsp, 8);
-      __ ret(0);
-    }
-    {
       StubCodeMark mark(this, "StubRoutines", "tan");
       StubRoutines::_intrinsic_tan = (double (*)(double)) __ pc();
 
@@ -3752,7 +3726,7 @@
     const Register to = c_rarg1; // destination array address
     const Register key = c_rarg2; // key array address
     const Register counter = c_rarg3; // counter byte array initialized from counter array address
-    // and left with the results of the last encryption block
+                                      // and updated with the incremented counter in the end
 #ifndef _WIN64
     const Register len_reg = c_rarg4;
     const Register saved_encCounter_start = c_rarg5;
@@ -3967,8 +3941,8 @@
         __ addptr(pos, AESBlockSize);
         __ subptr(len_reg, AESBlockSize);
         __ jmp(L_singleBlockLoopTop[k]);
-      __ BIND(L_processTail_insr[k]);
-        __ addptr(pos, len_reg);
+      __ BIND(L_processTail_insr[k]);                               // Process the tail part of the input array
+        __ addptr(pos, len_reg);                                    // 1. Insert bytes from src array into xmm_from0 register
         __ testptr(len_reg, 8);
         __ jcc(Assembler::zero, L_processTail_4_insr[k]);
           __ subptr(pos,8);
@@ -3993,11 +3967,11 @@
           __ pinsrb(xmm_from0, Address(from, pos), 0);
         __ BIND(L_processTail_exit_insr[k]);
 
-        __ movdqu(Address(saved_encCounter_start, 0), xmm_result0);
-        __ pxor(xmm_result0, xmm_from0);
+        __ movdqu(Address(saved_encCounter_start, 0), xmm_result0);  // 2. Perform pxor of the encrypted counter and plaintext Bytes.
+        __ pxor(xmm_result0, xmm_from0);                             //    Also the encrypted counter is saved for next invocation.
 
         __ testptr(len_reg, 8);
-        __ jcc(Assembler::zero, L_processTail_4_extr[k]);
+        __ jcc(Assembler::zero, L_processTail_4_extr[k]);            // 3. Extract bytes from xmm_result0 into the dest. array
           __ pextrq(Address(to, pos), xmm_result0, 0);
           __ psrldq(xmm_result0, 8);
           __ addptr(pos, 8);
@@ -4654,6 +4628,92 @@
 
   }
 
+  address generate_libmSin() {
+    address start = __ pc();
+
+    const XMMRegister x0 = xmm0;
+    const XMMRegister x1 = xmm1;
+    const XMMRegister x2 = xmm2;
+    const XMMRegister x3 = xmm3;
+
+    const XMMRegister x4 = xmm4;
+    const XMMRegister x5 = xmm5;
+    const XMMRegister x6 = xmm6;
+    const XMMRegister x7 = xmm7;
+
+    const Register tmp1 = r8;
+    const Register tmp2 = r9;
+    const Register tmp3 = r10;
+    const Register tmp4 = r11;
+
+    BLOCK_COMMENT("Entry:");
+    __ enter(); // required for proper stackwalking of RuntimeStub frame
+
+#ifdef _WIN64
+    // save the xmm registers which must be preserved 6-7
+    __ subptr(rsp, 4 * wordSize);
+    __ movdqu(Address(rsp, 0), xmm6);
+    __ movdqu(Address(rsp, 2 * wordSize), xmm7);
+#endif
+    __ fast_sin(x0, x1, x2, x3, x4, x5, x6, x7, rax, rbx, rcx, rdx, tmp1, tmp2, tmp3, tmp4);
+
+#ifdef _WIN64
+    // restore xmm regs belonging to calling function
+    __ movdqu(xmm6, Address(rsp, 0));
+    __ movdqu(xmm7, Address(rsp, 2 * wordSize));
+    __ addptr(rsp, 4 * wordSize);
+#endif
+
+    __ leave(); // required for proper stackwalking of RuntimeStub frame
+    __ ret(0);
+
+    return start;
+
+  }
+
+  address generate_libmCos() {
+    address start = __ pc();
+
+    const XMMRegister x0 = xmm0;
+    const XMMRegister x1 = xmm1;
+    const XMMRegister x2 = xmm2;
+    const XMMRegister x3 = xmm3;
+
+    const XMMRegister x4 = xmm4;
+    const XMMRegister x5 = xmm5;
+    const XMMRegister x6 = xmm6;
+    const XMMRegister x7 = xmm7;
+
+    const Register tmp1 = r8;
+    const Register tmp2 = r9;
+    const Register tmp3 = r10;
+    const Register tmp4 = r11;
+
+    BLOCK_COMMENT("Entry:");
+    __ enter(); // required for proper stackwalking of RuntimeStub frame
+
+#ifdef _WIN64
+    // save the xmm registers which must be preserved 6-7
+    __ subptr(rsp, 4 * wordSize);
+    __ movdqu(Address(rsp, 0), xmm6);
+    __ movdqu(Address(rsp, 2 * wordSize), xmm7);
+#endif
+    __ fast_cos(x0, x1, x2, x3, x4, x5, x6, x7, rax, rcx, rdx, tmp1, tmp2, tmp3, tmp4);
+
+#ifdef _WIN64
+    // restore xmm regs belonging to calling function
+    __ movdqu(xmm6, Address(rsp, 0));
+    __ movdqu(xmm7, Address(rsp, 2 * wordSize));
+    __ addptr(rsp, 4 * wordSize);
+#endif
+
+    __ leave(); // required for proper stackwalking of RuntimeStub frame
+    __ ret(0);
+
+    return start;
+
+  }
+
 #undef __
 #define __ masm->
 
@@ -4849,6 +4909,12 @@
       StubRoutines::_dexp = generate_libmExp();
       StubRoutines::_dlog = generate_libmLog();
       StubRoutines::_dpow = generate_libmPow();
+      if (UseLibmSinIntrinsic) {
+        StubRoutines::_dsin = generate_libmSin();
+      }
+      if (UseLibmCosIntrinsic) {
+        StubRoutines::_dcos = generate_libmCos();
+      }
     }
   }
 
--- a/hotspot/src/cpu/x86/vm/stubRoutines_x86_32.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/cpu/x86/vm/stubRoutines_x86_32.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -30,7 +30,7 @@
 // extend it.
 
 enum platform_dependent_constants {
-  code_size1 =  9000,           // simply increase if too small (assembler will crash if too small)
+  code_size1 =  20000,           // simply increase if too small (assembler will crash if too small)
   code_size2 = 33800            // simply increase if too small (assembler will crash if too small)
 };
 
--- a/hotspot/src/cpu/x86/vm/stubRoutines_x86_64.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/cpu/x86/vm/stubRoutines_x86_64.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -32,7 +32,7 @@
 static bool    returns_to_call_stub(address return_pc)   { return return_pc == _call_stub_return_address; }
 
 enum platform_dependent_constants {
-  code_size1 = 19000,          // simply increase if too small (assembler will crash if too small)
+  code_size1 = 30000,          // simply increase if too small (assembler will crash if too small)
   code_size2 = 35000           // simply increase if too small (assembler will crash if too small)
 };
 
--- a/hotspot/src/cpu/x86/vm/vm_version_x86.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/cpu/x86/vm/vm_version_x86.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -671,7 +671,7 @@
       }
       // --AES-CTR ends--
     }
-  } else if (UseAES || UseAESIntrinsics) {
+  } else if (UseAES || UseAESIntrinsics || UseAESCTRIntrinsics) {
     if (UseAES && !FLAG_IS_DEFAULT(UseAES)) {
       warning("AES instructions are not available on this CPU");
       FLAG_SET_DEFAULT(UseAES, false);
@@ -707,16 +707,6 @@
     FLAG_SET_DEFAULT(UseCRC32Intrinsics, false);
   }
 
-  if (UseAESIntrinsics) {
-    if (FLAG_IS_DEFAULT(UseAESCTRIntrinsics)) {
-      UseAESCTRIntrinsics = true;
-    }
-  } else if (UseAESCTRIntrinsics) {
-    if (!FLAG_IS_DEFAULT(UseAESCTRIntrinsics))
-        warning("AES/CTR intrinsics are not available on this CPU");
-    FLAG_SET_DEFAULT(UseAESCTRIntrinsics, false);
-  }
-
   if (supports_sse4_2()) {
     if (FLAG_IS_DEFAULT(UseCRC32CIntrinsics)) {
       UseCRC32CIntrinsics = true;
--- a/hotspot/src/cpu/x86/vm/x86_32.ad	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/cpu/x86/vm/x86_32.ad	Fri Jan 15 09:15:33 2016 +0100
@@ -1009,6 +1009,7 @@
       __ vmovdqu(xmm0, Address(rsp, src_offset));
       __ vmovdqu(Address(rsp, dst_offset), xmm0);
       __ vmovdqu(xmm0, Address(rsp, -32));
+      break;
     case Op_VecZ:
       __ evmovdqul(Address(rsp, -64), xmm0, 2);
       __ evmovdqul(xmm0, Address(rsp, src_offset), 2);
@@ -1049,6 +1050,7 @@
                 "vmovdqu [rsp + #%d], xmm0\n\t"
                 "vmovdqu xmm0, [rsp - #32]",
                 src_offset, dst_offset);
+      break;
     case Op_VecZ:
       st->print("vmovdqu [rsp - #64], xmm0\t# 512-bit mem-mem spill\n\t"
                 "vmovdqu xmm0, [rsp + #%d]\n\t"
@@ -9791,48 +9793,6 @@
   ins_pipe( pipe_slow );
 %}
 
-instruct sinDPR_reg(regDPR1 dst, regDPR1 src) %{
-  predicate (UseSSE<=1);
-  match(Set dst (SinD src));
-  ins_cost(1800);
-  format %{ "DSIN   $dst" %}
-  opcode(0xD9, 0xFE);
-  ins_encode( OpcP, OpcS );
-  ins_pipe( pipe_slow );
-%}
-
-instruct sinD_reg(regD dst, eFlagsReg cr) %{
-  predicate (UseSSE>=2);
-  match(Set dst (SinD dst));
-  effect(KILL cr); // Push_{Src|Result}D() uses "{SUB|ADD} ESP,8"
-  ins_cost(1800);
-  format %{ "DSIN   $dst" %}
-  opcode(0xD9, 0xFE);
-  ins_encode( Push_SrcD(dst), OpcP, OpcS, Push_ResultD(dst) );
-  ins_pipe( pipe_slow );
-%}
-
-instruct cosDPR_reg(regDPR1 dst, regDPR1 src) %{
-  predicate (UseSSE<=1);
-  match(Set dst (CosD src));
-  ins_cost(1800);
-  format %{ "DCOS   $dst" %}
-  opcode(0xD9, 0xFF);
-  ins_encode( OpcP, OpcS );
-  ins_pipe( pipe_slow );
-%}
-
-instruct cosD_reg(regD dst, eFlagsReg cr) %{
-  predicate (UseSSE>=2);
-  match(Set dst (CosD dst));
-  effect(KILL cr); // Push_{Src|Result}D() uses "{SUB|ADD} ESP,8"
-  ins_cost(1800);
-  format %{ "DCOS   $dst" %}
-  opcode(0xD9, 0xFF);
-  ins_encode( Push_SrcD(dst), OpcP, OpcS, Push_ResultD(dst) );
-  ins_pipe( pipe_slow );
-%}
-
 instruct tanDPR_reg(regDPR1 dst, regDPR1 src) %{
   predicate (UseSSE<=1);
   match(Set dst(TanD src));
--- a/hotspot/src/cpu/x86/vm/x86_64.ad	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/cpu/x86/vm/x86_64.ad	Fri Jan 15 09:15:33 2016 +0100
@@ -1079,6 +1079,7 @@
       __ vmovdqu(xmm0, Address(rsp, src_offset));
       __ vmovdqu(Address(rsp, dst_offset), xmm0);
       __ vmovdqu(xmm0, Address(rsp, -32));
+      break;
     case Op_VecZ:
       __ evmovdqul(Address(rsp, -64), xmm0, 2);
       __ evmovdqul(xmm0, Address(rsp, src_offset), 2);
@@ -9819,24 +9820,6 @@
 %}
 
 // -----------Trig and Trancendental Instructions------------------------------
-instruct cosD_reg(regD dst) %{
-  match(Set dst (CosD dst));
-
-  format %{ "dcos   $dst\n\t" %}
-  opcode(0xD9, 0xFF);
-  ins_encode( Push_SrcXD(dst), OpcP, OpcS, Push_ResultXD(dst) );
-  ins_pipe( pipe_slow );
-%}
-
-instruct sinD_reg(regD dst) %{
-  match(Set dst (SinD dst));
-
-  format %{ "dsin   $dst\n\t" %}
-  opcode(0xD9, 0xFE);
-  ins_encode( Push_SrcXD(dst), OpcP, OpcS, Push_ResultXD(dst) );
-  ins_pipe( pipe_slow );
-%}
-
 instruct tanD_reg(regD dst) %{
   match(Set dst (TanD dst));
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/src/jdk.vm.ci/share/classes/META-INF/services/jdk.vm.ci.hotspot.HotSpotJVMCIBackendFactory	Fri Jan 15 09:15:33 2016 +0100
@@ -0,0 +1,3 @@
+jdk.vm.ci.hotspot.aarch64.AArch64HotSpotJVMCIBackendFactory
+jdk.vm.ci.hotspot.amd64.AMD64HotSpotJVMCIBackendFactory
+jdk.vm.ci.hotspot.sparc.SPARCHotSpotJVMCIBackendFactory
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot.aarch64/src/jdk/vm/ci/hotspot/aarch64/AArch64HotSpotJVMCIBackendFactory.java	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot.aarch64/src/jdk/vm/ci/hotspot/aarch64/AArch64HotSpotJVMCIBackendFactory.java	Fri Jan 15 09:15:33 2016 +0100
@@ -41,9 +41,7 @@
 import jdk.vm.ci.inittimer.InitTimer;
 import jdk.vm.ci.meta.ConstantReflectionProvider;
 import jdk.vm.ci.runtime.JVMCIBackend;
-import jdk.vm.ci.service.ServiceProvider;
 
-@ServiceProvider(HotSpotJVMCIBackendFactory.class)
 public class AArch64HotSpotJVMCIBackendFactory implements HotSpotJVMCIBackendFactory {
 
     protected EnumSet<AArch64.CPUFeature> computeFeatures(@SuppressWarnings("unused") HotSpotVMConfig config) {
@@ -124,8 +122,7 @@
         }
     }
 
-    protected JVMCIBackend createBackend(HotSpotMetaAccessProvider metaAccess, HotSpotCodeCacheProvider codeCache, ConstantReflectionProvider constantReflection,
-                    StackIntrospection stackIntrospection) {
+    protected JVMCIBackend createBackend(HotSpotMetaAccessProvider metaAccess, HotSpotCodeCacheProvider codeCache, ConstantReflectionProvider constantReflection, StackIntrospection stackIntrospection) {
         return new JVMCIBackend(metaAccess, codeCache, constantReflection, stackIntrospection);
     }
 }
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot.amd64/src/jdk/vm/ci/hotspot/amd64/AMD64HotSpotJVMCIBackendFactory.java	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot.amd64/src/jdk/vm/ci/hotspot/amd64/AMD64HotSpotJVMCIBackendFactory.java	Fri Jan 15 09:15:33 2016 +0100
@@ -41,9 +41,7 @@
 import jdk.vm.ci.inittimer.InitTimer;
 import jdk.vm.ci.meta.ConstantReflectionProvider;
 import jdk.vm.ci.runtime.JVMCIBackend;
-import jdk.vm.ci.service.ServiceProvider;
 
-@ServiceProvider(HotSpotJVMCIBackendFactory.class)
 public class AMD64HotSpotJVMCIBackendFactory implements HotSpotJVMCIBackendFactory {
 
     protected EnumSet<AMD64.CPUFeature> computeFeatures(HotSpotVMConfig config) {
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot.sparc/src/jdk/vm/ci/hotspot/sparc/SPARCHotSpotJVMCIBackendFactory.java	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot.sparc/src/jdk/vm/ci/hotspot/sparc/SPARCHotSpotJVMCIBackendFactory.java	Fri Jan 15 09:15:33 2016 +0100
@@ -39,11 +39,9 @@
 import jdk.vm.ci.hotspot.HotSpotVMConfig;
 import jdk.vm.ci.inittimer.InitTimer;
 import jdk.vm.ci.runtime.JVMCIBackend;
-import jdk.vm.ci.service.ServiceProvider;
 import jdk.vm.ci.sparc.SPARC;
 import jdk.vm.ci.sparc.SPARC.CPUFeature;
 
-@ServiceProvider(HotSpotJVMCIBackendFactory.class)
 public class SPARCHotSpotJVMCIBackendFactory implements HotSpotJVMCIBackendFactory {
 
     protected TargetDescription createTarget(HotSpotVMConfig config) {
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotJVMCICompilerConfig.java	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotJVMCICompilerConfig.java	Fri Jan 15 09:15:33 2016 +0100
@@ -27,7 +27,7 @@
 import jdk.vm.ci.runtime.JVMCICompiler;
 import jdk.vm.ci.runtime.JVMCICompilerFactory;
 import jdk.vm.ci.runtime.JVMCIRuntime;
-import jdk.vm.ci.service.Services;
+import jdk.vm.ci.services.Services;
 
 final class HotSpotJVMCICompilerConfig {
 
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotJVMCIRuntime.java	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotJVMCIRuntime.java	Fri Jan 15 09:15:33 2016 +0100
@@ -48,7 +48,7 @@
 import jdk.vm.ci.runtime.JVMCI;
 import jdk.vm.ci.runtime.JVMCIBackend;
 import jdk.vm.ci.runtime.JVMCICompiler;
-import jdk.vm.ci.service.Services;
+import jdk.vm.ci.services.Services;
 import jdk.internal.misc.VM;
 
 //JaCoCo Exclude
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.service.processor/src/META-INF/services/javax.annotation.processing.Processor	Thu Jan 14 20:57:31 2016 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-jdk.vm.ci.service.processor.ServiceProviderProcessor
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.service.processor/src/jdk/vm/ci/service/processor/ServiceProviderProcessor.java	Thu Jan 14 20:57:31 2016 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,119 +0,0 @@
-/*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package jdk.vm.ci.service.processor;
-
-import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.io.PrintWriter;
-import java.util.HashSet;
-import java.util.Set;
-
-import javax.annotation.processing.AbstractProcessor;
-import javax.annotation.processing.RoundEnvironment;
-import javax.annotation.processing.SupportedAnnotationTypes;
-import javax.lang.model.SourceVersion;
-import javax.lang.model.element.Element;
-import javax.lang.model.element.TypeElement;
-import javax.lang.model.type.MirroredTypeException;
-import javax.lang.model.type.TypeMirror;
-import javax.tools.Diagnostic.Kind;
-import javax.tools.FileObject;
-import javax.tools.StandardLocation;
-
-import jdk.vm.ci.service.ServiceProvider;
-
-@SupportedAnnotationTypes("jdk.vm.ci.service.ServiceProvider")
-public class ServiceProviderProcessor extends AbstractProcessor {
-
-    private final Set<TypeElement> processed = new HashSet<>();
-
-    @Override
-    public SourceVersion getSupportedSourceVersion() {
-        return SourceVersion.latest();
-    }
-
-    private boolean verifyAnnotation(TypeMirror serviceInterface, TypeElement serviceProvider) {
-        if (!processingEnv.getTypeUtils().isSubtype(serviceProvider.asType(), serviceInterface)) {
-            String msg = String.format("Service provider class %s must implement service interface %s", serviceProvider.getSimpleName(), serviceInterface);
-            processingEnv.getMessager().printMessage(Kind.ERROR, msg, serviceProvider);
-            return false;
-        }
-
-        return true;
-    }
-
-    private void processElement(TypeElement serviceProvider) {
-        if (processed.contains(serviceProvider)) {
-            return;
-        }
-
-        processed.add(serviceProvider);
-        ServiceProvider annotation = serviceProvider.getAnnotation(ServiceProvider.class);
-        if (annotation != null) {
-            try {
-                annotation.value();
-            } catch (MirroredTypeException ex) {
-                TypeMirror serviceInterface = ex.getTypeMirror();
-                if (verifyAnnotation(serviceInterface, serviceProvider)) {
-                    String interfaceName = ex.getTypeMirror().toString();
-                    createProviderFile(serviceProvider, interfaceName);
-                }
-            }
-        }
-    }
-
-    private void createProviderFile(TypeElement serviceProvider, String interfaceName) {
-        if (serviceProvider.getNestingKind().isNested()) {
-            // This is a simplifying constraint that means we don't have to
-            // processed the qualified name to insert '$' characters at
-            // the relevant positions.
-            String msg = String.format("Service provider class %s must be a top level class", serviceProvider.getSimpleName());
-            processingEnv.getMessager().printMessage(Kind.ERROR, msg, serviceProvider);
-            return;
-        }
-
-        String filename = "META-INF/jvmci.providers/" + serviceProvider.getQualifiedName();
-        try {
-            FileObject file = processingEnv.getFiler().createResource(StandardLocation.CLASS_OUTPUT, "", filename, serviceProvider);
-            PrintWriter writer = new PrintWriter(new OutputStreamWriter(file.openOutputStream(), "UTF-8"));
-            writer.println(interfaceName);
-            writer.close();
-        } catch (IOException e) {
-            processingEnv.getMessager().printMessage(Kind.ERROR, e.getMessage(), serviceProvider);
-        }
-    }
-
-    @Override
-    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
-        if (roundEnv.processingOver()) {
-            return true;
-        }
-
-        for (Element element : roundEnv.getElementsAnnotatedWith(ServiceProvider.class)) {
-            assert element.getKind().isClass();
-            processElement((TypeElement) element);
-        }
-
-        return true;
-    }
-}
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.service/.checkstyle_checks.xml	Thu Jan 14 20:57:31 2016 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,213 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.3//EN" "http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
-
-<!--
-    Checkstyle-Configuration: Checks
-    Description: none
--->
-<module name="Checker">
-  <property name="severity" value="error"/>
-  <module name="TreeWalker">
-    <property name="tabWidth" value="4"/>
-    <module name="FileContentsHolder"/>
-    <module name="JavadocStyle">
-      <property name="checkHtml" value="false"/>
-    </module>
-    <module name="LocalFinalVariableName"/>
-    <module name="LocalVariableName"/>
-    <module name="MemberName">
-      <property name="format" value="^(([a-z][a-zA-Z0-9]*$)|(_[A-Z][a-zA-Z0-9]*_[a-z][a-zA-Z0-9]*$))"/>
-    </module>
-    <module name="MethodName"/>
-    <module name="PackageName"/>
-    <module name="ParameterName"/>
-    <module name="TypeName">
-      <property name="format" value="^[A-Z][_a-zA-Z0-9]*$"/>
-    </module>
-    <module name="RedundantImport"/>
-    <module name="LineLength">
-      <property name="max" value="250"/>
-    </module>
-    <module name="MethodParamPad"/>
-    <module name="NoWhitespaceAfter">
-      <property name="tokens" value="ARRAY_INIT,BNOT,DEC,DOT,INC,LNOT,UNARY_MINUS,UNARY_PLUS"/>
-    </module>
-    <module name="AvoidStarImport">
-       <property name="allowClassImports" value="false"/>
-       <property name="allowStaticMemberImports" value="false"/>
-    </module>
-    <module name="NoWhitespaceBefore">
-      <property name="tokens" value="SEMI,DOT,POST_DEC,POST_INC"/>
-    </module>
-    <module name="ParenPad"/>
-    <module name="TypecastParenPad">
-      <property name="tokens" value="RPAREN,TYPECAST"/>
-    </module>
-    <module name="WhitespaceAfter"/>
-    <module name="WhitespaceAround">
-      <property name="tokens" value="ASSIGN,BAND,BAND_ASSIGN,BOR,BOR_ASSIGN,BSR,BSR_ASSIGN,BXOR,BXOR_ASSIGN,COLON,DIV,DIV_ASSIGN,EQUAL,GE,GT,LAND,LE,LITERAL_ASSERT,LITERAL_CATCH,LITERAL_DO,LITERAL_ELSE,LITERAL_FINALLY,LITERAL_FOR,LITERAL_IF,LITERAL_RETURN,LITERAL_SYNCHRONIZED,LITERAL_TRY,LITERAL_WHILE,LOR,LT,MINUS,MINUS_ASSIGN,MOD,MOD_ASSIGN,NOT_EQUAL,PLUS,PLUS_ASSIGN,QUESTION,SL,SLIST,SL_ASSIGN,SR,SR_ASSIGN,STAR,STAR_ASSIGN,LITERAL_ASSERT,TYPE_EXTENSION_AND"/>
-    </module>
-    <module name="RedundantModifier"/>
-    <module name="AvoidNestedBlocks">
-      <property name="allowInSwitchCase" value="true"/>
-    </module>
-    <module name="EmptyBlock">
-      <property name="option" value="text"/>
-      <property name="tokens" value="LITERAL_DO,LITERAL_ELSE,LITERAL_FINALLY,LITERAL_IF,LITERAL_TRY,LITERAL_WHILE,STATIC_INIT"/>
-    </module>
-    <module name="LeftCurly"/>
-    <module name="NeedBraces"/>
-    <module name="RightCurly"/>
-    <module name="EmptyStatement"/>
-    <module name="HiddenField">
-      <property name="severity" value="ignore"/>
-      <property name="ignoreConstructorParameter" value="true"/>
-      <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
-    </module>
-    <module name="FinalClass"/>
-    <module name="HideUtilityClassConstructor">
-      <property name="severity" value="ignore"/>
-      <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
-    </module>
-    <module name="ArrayTypeStyle"/>
-    <module name="UpperEll"/>
-    <module name="FallThrough"/>
-    <module name="FinalLocalVariable">
-      <property name="severity" value="ignore"/>
-      <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
-    </module>
-    <module name="MultipleVariableDeclarations"/>
-    <module name="StringLiteralEquality">
-      <property name="severity" value="error"/>
-    </module>
-    <module name="SuperFinalize"/>
-    <module name="UnnecessaryParentheses">
-      <property name="severity" value="ignore"/>
-      <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
-    </module>
-    <module name="Indentation">
-      <property name="severity" value="ignore"/>
-      <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
-    </module>
-    <module name="StaticVariableName">
-      <property name="format" value="^[A-Za-z][a-zA-Z0-9]*$"/>
-    </module>
-    <module name="EmptyForInitializerPad"/>
-    <module name="EmptyForIteratorPad"/>
-    <module name="ModifierOrder"/>
-    <module name="DefaultComesLast"/>
-    <module name="InnerAssignment">
-      <property name="severity" value="ignore"/>
-      <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
-    </module>
-    <module name="ModifiedControlVariable"/>
-    <module name="MutableException">
-      <property name="severity" value="ignore"/>
-      <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
-    </module>
-    <module name="ParameterAssignment">
-      <property name="severity" value="ignore"/>
-      <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/>
-    </module>
-    <module name="RegexpSinglelineJava">
-      <metadata name="net.sf.eclipsecs.core.comment" value="Illegal trailing whitespace(s) at the end of the line."/>
-      <property name="format" value="\s$"/>
-      <property name="message" value="Illegal trailing whitespace(s) at the end of the line."/>
-      <property name="ignoreComments" value="true"/>
-      <metadata name="com.atlassw.tools.eclipse.checkstyle.comment" value="Checks for trailing spaces at the end of a line"/>
-    </module>
-    <module name="RegexpSinglelineJava">
-      <metadata name="net.sf.eclipsecs.core.comment" value="illegal space before a comma"/>
-      <property name="format" value=" ,"/>
-      <property name="message" value="illegal space before a comma"/>
-      <property name="ignoreComments" value="true"/>
-      <metadata name="com.atlassw.tools.eclipse.checkstyle.comment" value="Checks for whitespace before a comma."/>
-      <metadata name="com.atlassw.tools.eclipse.checkstyle.customMessage" value="Illegal whitespace before a comma."/>
-    </module>
-    <module name="RegexpSinglelineJava">
-      <property name="format" value="[^\x00-\x7F]"/>
-      <property name="message" value="Only use ASCII characters."/>
-    </module>
-    <module name="RegexpSinglelineJava">
-      <property name="format" value="new (Hashtable|Vector|Stack|StringBuffer)[^\w]"/>
-      <property name="message" value="Don't use old synchronized collection classes"/>
-    </module>
-  </module>
-  <module name="RegexpHeader">
-    <property name="header" value="/\*\n \* Copyright \(c\) (20[0-9][0-9], )?20[0-9][0-9], Oracle and/or its affiliates. All rights reserved.\n \* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.\n \*\n \* This code is free software; you can redistribute it and/or modify it\n \* under the terms of the GNU General Public License version 2 only, as\n \* published by the Free Software Foundation.\n \*\n \* This code is distributed in the hope that it will be useful, but WITHOUT\n \* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n \* FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License\n \* version 2 for more details \(a copy is included in the LICENSE file that\n \* accompanied this code\).\n \*\n \* You should have received a copy of the GNU General Public License version\n \* 2 along with this work; if not, write to the Free Software Foundation,\n \* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n \*\n \* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA\n \* or visit www.oracle.com if you need additional information or have any\n \* questions.\n \*/\n"/>
-    <property name="fileExtensions" value="java"/>
-  </module>
-  <module name="FileTabCharacter">
-    <property name="severity" value="error"/>
-    <property name="fileExtensions" value="java"/>
-  </module>
-  <module name="NewlineAtEndOfFile">
-    <property name="lineSeparator" value="lf"/>
-  </module>
-  <module name="Translation"/>
-  <module name="SuppressionCommentFilter">
-    <property name="offCommentFormat" value="Checkstyle: stop constant name check"/>
-    <property name="onCommentFormat" value="Checkstyle: resume constant name check"/>
-    <property name="checkFormat" value="ConstantNameCheck"/>
-    <metadata name="com.atlassw.tools.eclipse.checkstyle.comment" value="Allow non-conforming constant names"/>
-  </module>
-  <module name="SuppressionCommentFilter">
-    <property name="offCommentFormat" value="Checkstyle: stop method name check"/>
-    <property name="onCommentFormat" value="Checkstyle: resume method name check"/>
-    <property name="checkFormat" value="MethodName"/>
-    <property name="checkC" value="false"/>
-    <metadata name="com.atlassw.tools.eclipse.checkstyle.comment" value="Disable method name checks"/>
-  </module>
-  <module name="SuppressionCommentFilter">
-    <property name="offCommentFormat" value="CheckStyle: stop parameter assignment check"/>
-    <property name="onCommentFormat" value="CheckStyle: resume parameter assignment check"/>
-    <property name="checkFormat" value="ParameterAssignment"/>
-    <property name="checkC" value="false"/>
-    <metadata name="com.atlassw.tools.eclipse.checkstyle.comment" value="Disable Parameter Assignment"/>
-  </module>
-  <module name="SuppressionCommentFilter">
-    <property name="offCommentFormat" value="Checkstyle: stop final variable check"/>
-    <property name="onCommentFormat" value="Checkstyle: resume final variable check"/>
-    <property name="checkFormat" value="FinalLocalVariable"/>
-    <metadata name="com.atlassw.tools.eclipse.checkstyle.comment" value="Disable final variable checks"/>
-  </module>
-  <module name="SuppressionCommentFilter">
-    <property name="offCommentFormat" value="Checkstyle: stop"/>
-    <property name="onCommentFormat" value="Checkstyle: resume"/>
-    <metadata name="com.atlassw.tools.eclipse.checkstyle.comment" value="Disable all checks"/>
-  </module>
-  <module name="SuppressionCommentFilter">
-    <property name="offCommentFormat" value="CheckStyle: stop inner assignment check"/>
-    <property name="onCommentFormat" value="CheckStyle: resume inner assignment check"/>
-    <property name="checkFormat" value="InnerAssignment"/>
-    <metadata name="com.atlassw.tools.eclipse.checkstyle.comment" value="Disable inner assignment checks"/>
-  </module>
-  <module name="SuppressionCommentFilter">
-    <property name="offCommentFormat" value="Checkstyle: stop field name check"/>
-    <property name="onCommentFormat" value="Checkstyle: resume field name check"/>
-    <property name="checkFormat" value="MemberName"/>
-    <property name="checkC" value="false"/>
-    <metadata name="com.atlassw.tools.eclipse.checkstyle.comment" value="Disable field name checks"/>
-  </module>
-  <module name="RegexpMultiline">
-    <metadata name="net.sf.eclipsecs.core.comment" value="illegal Windows line ending"/>
-    <property name="format" value="\r\n"/>
-    <property name="message" value="illegal Windows line ending"/>
-  </module>
-  <module name="SuppressionCommentFilter">
-    <property name="offCommentFormat" value="CheckStyle: stop header check"/>
-    <property name="onCommentFormat" value="CheckStyle: resume header check"/>
-    <property name="checkFormat" value=".*Header"/>
-    <metadata name="com.atlassw.tools.eclipse.checkstyle.comment" value="Disable header checks"/>
-  </module>
-  <module name="SuppressionCommentFilter">
-    <property name="offCommentFormat" value="CheckStyle: stop line length check"/>
-    <property name="onCommentFormat" value="CheckStyle: resume line length check"/>
-    <property name="checkFormat" value="LineLength"/>
-  </module>
-  <module name="SuppressionCommentFilter">
-    <property name="offCommentFormat" value="CheckStyle: start generated"/>
-    <property name="onCommentFormat" value="CheckStyle: stop generated"/>
-    <property name="checkFormat" value=".*Name|.*LineLength|.*Header"/>
-  </module>
-</module>
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.service/src/jdk/vm/ci/service/ServiceProvider.java	Thu Jan 14 20:57:31 2016 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package jdk.vm.ci.service;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Annotates a service provider than can be loaded via {@linkplain Services#load(Class)} or
- * {@link Services#loadSingle(Class, boolean)}.
- */
-@Retention(RetentionPolicy.CLASS)
-@Target(ElementType.TYPE)
-public @interface ServiceProvider {
-
-    Class<?> value();
-}
--- a/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.service/src/jdk/vm/ci/service/Services.java	Thu Jan 14 20:57:31 2016 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,76 +0,0 @@
-/*
- * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package jdk.vm.ci.service;
-
-import java.util.Formatter;
-import java.util.Iterator;
-import java.util.ServiceConfigurationError;
-import java.util.ServiceLoader;
-
-/**
- * A mechanism for accessing service providers via JVMCI.
- */
-public final class Services {
-
-    private Services() {
-    }
-
-    /**
-     * Gets an {@link Iterable} of the JVMCI providers available for a given service.
-     */
-    public static <S> Iterable<S> load(Class<S> service) {
-        return ServiceLoader.load(service);
-    }
-
-    /**
-     * Gets the JVMCI provider for a given service for which at most one provider must be available.
-     *
-     * @param service the service whose provider is being requested
-     * @param required specifies if an {@link InternalError} should be thrown if no provider of
-     *            {@code service} is available
-     */
-    public static <S> S loadSingle(Class<S> service, boolean required) {
-        Iterable<S> providers = ServiceLoader.load(service);
-        S singleProvider = null;
-        try {
-            for (Iterator<S> it = providers.iterator(); it.hasNext();) {
-                singleProvider = it.next();
-                if (it.hasNext()) {
-                    throw new InternalError(String.format("Multiple %s providers found", service.getName()));
-                }
-            }
-        } catch (ServiceConfigurationError e) {
-            // If the service is required we will bail out below.
-        }
-        if (singleProvider == null && required) {
-            String javaHome = System.getProperty("java.home");
-            String vmName = System.getProperty("java.vm.name");
-            Formatter errorMessage = new Formatter();
-            errorMessage.format("The VM does not expose required service %s.%n", service.getName());
-            errorMessage.format("Currently used Java home directory is %s.%n", javaHome);
-            errorMessage.format("Currently used VM configuration is: %s", vmName);
-            throw new UnsupportedOperationException(errorMessage.toString());
-        }
-        return singleProvider;
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/src/jdk.vm.ci/share/classes/jdk.vm.ci.services/src/jdk/vm/ci/services/Services.java	Fri Jan 15 09:15:33 2016 +0100
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package jdk.vm.ci.services;
+
+import java.util.Formatter;
+import java.util.Iterator;
+import java.util.ServiceConfigurationError;
+import java.util.ServiceLoader;
+
+/**
+ * A mechanism for accessing service providers via JVMCI.
+ */
+public final class Services {
+
+    private Services() {
+    }
+
+    /**
+     * Gets an {@link Iterable} of the JVMCI providers available for a given service.
+     */
+    public static <S> Iterable<S> load(Class<S> service) {
+        return ServiceLoader.load(service);
+    }
+
+    /**
+     * Gets the JVMCI provider for a given service for which at most one provider must be available.
+     *
+     * @param service the service whose provider is being requested
+     * @param required specifies if an {@link InternalError} should be thrown if no provider of
+     *            {@code service} is available
+     */
+    public static <S> S loadSingle(Class<S> service, boolean required) {
+        Iterable<S> providers = ServiceLoader.load(service);
+        S singleProvider = null;
+        try {
+            for (Iterator<S> it = providers.iterator(); it.hasNext();) {
+                singleProvider = it.next();
+                if (it.hasNext()) {
+                    throw new InternalError(String.format("Multiple %s providers found", service.getName()));
+                }
+            }
+        } catch (ServiceConfigurationError e) {
+            // If the service is required we will bail out below.
+        }
+        if (singleProvider == null && required) {
+            String javaHome = System.getProperty("java.home");
+            String vmName = System.getProperty("java.vm.name");
+            Formatter errorMessage = new Formatter();
+            errorMessage.format("The VM does not expose required service %s.%n", service.getName());
+            errorMessage.format("Currently used Java home directory is %s.%n", javaHome);
+            errorMessage.format("Currently used VM configuration is: %s", vmName);
+            throw new UnsupportedOperationException(errorMessage.toString());
+        }
+        return singleProvider;
+    }
+}
--- a/hotspot/src/share/tools/hsdis/hsdis.c	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/tools/hsdis/hsdis.c	Fri Jan 15 09:15:33 2016 +0100
@@ -125,15 +125,15 @@
                     event_callback_t  event_callback_arg,  void* event_stream_arg,
                     printf_callback_t printf_callback_arg, void* printf_stream_arg,
                     const char* options) {
-  decode_instructions_virtual((uintptr_t)start_pv,
-                             (uintptr_t)end_pv,
-                             (unsigned char*)start_pv,
-                             (uintptr_t)end_pv - (uintptr_t)start_pv,
-                             event_callback_arg,
-                             event_stream_arg,
-                             printf_callback_arg,
-                             printf_stream_arg,
-                             options, false);
+  return decode_instructions_virtual((uintptr_t)start_pv,
+                                     (uintptr_t)end_pv,
+                                     (unsigned char*)start_pv,
+                                     (uintptr_t)end_pv - (uintptr_t)start_pv,
+                                     event_callback_arg,
+                                     event_stream_arg,
+                                     printf_callback_arg,
+                                     printf_stream_arg,
+                                     options, false);
 }
 
 static void* decode(struct hsdis_app_data* app_data, const char* options) {
@@ -212,6 +212,7 @@
   case dis_condjsr:     type = "condjsr";    break;
   case dis_dref:        type = "dref";       break;
   case dis_dref2:       type = "dref2";      break;
+  case dis_noninsn:     type = "noninsn";    break;
   }
 
   strcpy(buf, close);
--- a/hotspot/src/share/vm/adlc/formssel.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/adlc/formssel.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -4010,7 +4010,6 @@
   if( _rChild ) {
     const char  *opType = _rChild->_opType;
     if( strcmp(opType,"AtanD")==0 ||
-        strcmp(opType,"CosD")==0 ||
         strcmp(opType,"DivD")==0 ||
         strcmp(opType,"DivF")==0 ||
         strcmp(opType,"DivI")==0 ||
@@ -4018,7 +4017,6 @@
         strcmp(opType,"ModD")==0 ||
         strcmp(opType,"ModF")==0 ||
         strcmp(opType,"ModI")==0 ||
-        strcmp(opType,"SinD")==0 ||
         strcmp(opType,"SqrtD")==0 ||
         strcmp(opType,"TanD")==0 ||
         strcmp(opType,"ConvD2F")==0 ||
--- a/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -1748,10 +1748,6 @@
   const Bytecodes::Code bc_raw = stream()->cur_bc_raw();
   assert(declared_signature != NULL, "cannot be null");
 
-  if (!C1PatchInvokeDynamic && Bytecodes::has_optional_appendix(bc_raw) && !will_link) {
-    BAILOUT("unlinked call site (C1PatchInvokeDynamic is off)");
-  }
-
   // we have to make sure the argument size (incl. the receiver)
   // is correct for compilation (the call would fail later during
   // linkage anyway) - was bug (gri 7/28/99)
@@ -1803,8 +1799,7 @@
   // Push appendix argument (MethodType, CallSite, etc.), if one.
   bool patch_for_appendix = false;
   int patching_appendix_arg = 0;
-  if (C1PatchInvokeDynamic &&
-      (Bytecodes::has_optional_appendix(bc_raw) && (!will_link || PatchALot))) {
+  if (Bytecodes::has_optional_appendix(bc_raw) && (!will_link || PatchALot)) {
     Value arg = append(new Constant(new ObjectConstant(compilation()->env()->unloaded_ciinstance()), copy_state_before()));
     apush(arg);
     patch_for_appendix = true;
--- a/hotspot/src/share/vm/c1/c1_LIR.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/c1/c1_LIR.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -729,8 +729,6 @@
 
 
     case lir_tan:
-    case lir_sin:
-    case lir_cos:
     case lir_log10: {
       assert(op->as_Op2() != NULL, "must be");
       LIR_Op2* op2 = (LIR_Op2*)op;
@@ -1740,8 +1738,6 @@
      case lir_rem:                   s = "rem";           break;
      case lir_abs:                   s = "abs";           break;
      case lir_sqrt:                  s = "sqrt";          break;
-     case lir_sin:                   s = "sin";           break;
-     case lir_cos:                   s = "cos";           break;
      case lir_tan:                   s = "tan";           break;
      case lir_log10:                 s = "log10";         break;
      case lir_logic_and:             s = "logic_and";     break;
--- a/hotspot/src/share/vm/c1/c1_LIR.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/c1/c1_LIR.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -958,8 +958,6 @@
       , lir_rem
       , lir_sqrt
       , lir_abs
-      , lir_sin
-      , lir_cos
       , lir_tan
       , lir_log10
       , lir_logic_and
@@ -2194,8 +2192,6 @@
   void abs (LIR_Opr from, LIR_Opr to, LIR_Opr tmp)                { append(new LIR_Op2(lir_abs , from, tmp, to)); }
   void sqrt(LIR_Opr from, LIR_Opr to, LIR_Opr tmp)                { append(new LIR_Op2(lir_sqrt, from, tmp, to)); }
   void log10 (LIR_Opr from, LIR_Opr to, LIR_Opr tmp)              { append(new LIR_Op2(lir_log10, from, LIR_OprFact::illegalOpr, to, tmp)); }
-  void sin (LIR_Opr from, LIR_Opr to, LIR_Opr tmp1, LIR_Opr tmp2) { append(new LIR_Op2(lir_sin , from, tmp1, to, tmp2)); }
-  void cos (LIR_Opr from, LIR_Opr to, LIR_Opr tmp1, LIR_Opr tmp2) { append(new LIR_Op2(lir_cos , from, tmp1, to, tmp2)); }
   void tan (LIR_Opr from, LIR_Opr to, LIR_Opr tmp1, LIR_Opr tmp2) { append(new LIR_Op2(lir_tan , from, tmp1, to, tmp2)); }
 
   void add (LIR_Opr left, LIR_Opr right, LIR_Opr res)      { append(new LIR_Op2(lir_add, left, right, res)); }
--- a/hotspot/src/share/vm/c1/c1_LIRAssembler.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/c1/c1_LIRAssembler.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -736,9 +736,7 @@
 
     case lir_abs:
     case lir_sqrt:
-    case lir_sin:
     case lir_tan:
-    case lir_cos:
     case lir_log10:
       intrinsic_op(op->code(), op->in_opr1(), op->in_opr2(), op->result_opr(), op);
       break;
--- a/hotspot/src/share/vm/c1/c1_LinearScan.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/c1/c1_LinearScan.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -6599,8 +6599,6 @@
         case lir_div_strictfp:
         case lir_rem:
         case lir_sqrt:
-        case lir_sin:
-        case lir_cos:
         case lir_abs:
         case lir_log10:
         case lir_logic_and:
--- a/hotspot/src/share/vm/c1/c1_Runtime1.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/c1/c1_Runtime1.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -321,6 +321,8 @@
   FUNCTION_CASE(entry, StubRoutines::dexp());
   FUNCTION_CASE(entry, StubRoutines::dlog());
   FUNCTION_CASE(entry, StubRoutines::dpow());
+  FUNCTION_CASE(entry, StubRoutines::dsin());
+  FUNCTION_CASE(entry, StubRoutines::dcos());
 
 #undef FUNCTION_CASE
 
@@ -956,20 +958,25 @@
     constantPoolHandle pool(thread, caller_method->constants());
     int index = bytecode.index();
     LinkResolver::resolve_invoke(info, Handle(), pool, index, bc, CHECK);
-    appendix = info.resolved_appendix();
     switch (bc) {
       case Bytecodes::_invokehandle: {
         int cache_index = ConstantPool::decode_cpcache_index(index, true);
         assert(cache_index >= 0 && cache_index < pool->cache()->length(), "unexpected cache index");
-        pool->cache()->entry_at(cache_index)->set_method_handle(pool, info);
+        ConstantPoolCacheEntry* cpce = pool->cache()->entry_at(cache_index);
+        cpce->set_method_handle(pool, info);
+        appendix = info.resolved_appendix();  // just in case somebody already resolved the entry
         break;
       }
       case Bytecodes::_invokedynamic: {
-        pool->invokedynamic_cp_cache_entry_at(index)->set_dynamic_call(pool, info);
+        ConstantPoolCacheEntry* cpce = pool->invokedynamic_cp_cache_entry_at(index);
+        cpce->set_dynamic_call(pool, info);
+        appendix = cpce->appendix_if_resolved(pool); // just in case somebody already resolved the entry
         break;
       }
       default: fatal("unexpected bytecode for load_appendix_patching_id");
     }
+    assert(appendix.not_null(), "%s @ %d (%s)",
+           caller_method->name_and_sig_as_C_string(), bci, Bytecodes::name(bc));
   } else {
     ShouldNotReachHere();
   }
@@ -1032,6 +1039,7 @@
         address copy_buff = stub_location - *byte_skip - *byte_count;
         address being_initialized_entry = stub_location - *being_initialized_entry_offset;
         if (TracePatching) {
+          ttyLocker ttyl;
           tty->print_cr(" Patching %s at bci %d at address " INTPTR_FORMAT "  (%s)", Bytecodes::name(code), bci,
                         p2i(instr_pc), (stub_id == Runtime1::access_field_patching_id) ? "field" : "klass");
           nmethod* caller_code = CodeCache::find_nmethod(caller_frame.pc());
--- a/hotspot/src/share/vm/c1/c1_globals.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/c1/c1_globals.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -341,9 +341,6 @@
   develop(bool, PrintCFGToFile, false,                                      \
           "print control flow graph to a separate file during compilation") \
                                                                             \
-  diagnostic(bool, C1PatchInvokeDynamic, true,                              \
-             "Patch invokedynamic appendix not known at compile time")      \
-                                                                            \
 // Read default values for c1 globals
 
 C1_FLAGS(DECLARE_DEVELOPER_FLAG, \
--- a/hotspot/src/share/vm/ci/ciEnv.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/ci/ciEnv.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -1045,9 +1045,6 @@
       if (printnmethods || PrintDebugInfo || PrintRelocations || PrintDependencies || PrintExceptionHandlers) {
         nm->print_nmethod(printnmethods);
       }
-      if (directives->PrintAssemblyOption) {
-        Disassembler::decode(nm);
-      }
 
       nm->set_has_unsafe_access(has_unsafe_access);
       nm->set_has_wide_vectors(has_wide_vectors);
--- a/hotspot/src/share/vm/classfile/javaClasses.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/classfile/javaClasses.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -1784,6 +1784,20 @@
   }
 }
 
+/**
+ * Print the throwable stack trace by calling the Java method java.lang.Throwable.printStackTrace().
+ */
+void java_lang_Throwable::java_printStackTrace(Handle throwable, TRAPS) {
+  assert(throwable->is_a(SystemDictionary::Throwable_klass()), "Throwable instance expected");
+  JavaValue result(T_VOID);
+  JavaCalls::call_virtual(&result,
+                          throwable,
+                          KlassHandle(THREAD, SystemDictionary::Throwable_klass()),
+                          vmSymbols::printStackTrace_name(),
+                          vmSymbols::void_method_signature(),
+                          THREAD);
+}
+
 void java_lang_Throwable::fill_in_stack_trace(Handle throwable, const methodHandle& method, TRAPS) {
   if (!StackTraceInThrowable) return;
   ResourceMark rm(THREAD);
--- a/hotspot/src/share/vm/classfile/javaClasses.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/classfile/javaClasses.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -554,6 +554,7 @@
   // Printing
   static void print(Handle throwable, outputStream* st);
   static void print_stack_trace(Handle throwable, outputStream* st);
+  static void java_printStackTrace(Handle throwable, TRAPS);
   // Debugging
   friend class JavaClasses;
 };
--- a/hotspot/src/share/vm/classfile/systemDictionary.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/classfile/systemDictionary.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -2386,6 +2386,7 @@
       oop appendix = appendix_box->obj_at(0);
       if (TraceMethodHandles) {
     #ifndef PRODUCT
+        ttyLocker ttyl;
         tty->print("Linked method=" INTPTR_FORMAT ": ", p2i(m));
         m->print();
         if (appendix != NULL) { tty->print("appendix = "); appendix->print(); }
--- a/hotspot/src/share/vm/code/codeBlob.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/code/codeBlob.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -181,6 +181,11 @@
   return oop_maps()->find_map_at_offset((intptr_t) return_address - (intptr_t) code_begin());
 }
 
+void CodeBlob::print_code() {
+  HandleMark hm;
+  ResourceMark m;
+  Disassembler::decode(this, tty);
+}
 
 //----------------------------------------------------------------------------------------------------
 // Implementation of BufferBlob
--- a/hotspot/src/share/vm/code/codeBlob.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/code/codeBlob.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -196,6 +196,7 @@
   void print() const                             { print_on(tty); }
   virtual void print_on(outputStream* st) const;
   virtual void print_value_on(outputStream* st) const;
+  void print_code();
 
   // Deal with Disassembler, VTune, Forte, JvmtiExport, MemoryService.
   static void trace_new_stub(CodeBlob* blob, const char* name1, const char* name2 = "");
--- a/hotspot/src/share/vm/code/nmethod.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/code/nmethod.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -2640,6 +2640,7 @@
     ResourceMark rm(thread);
     CodeBlob* cb = CodeCache::find_blob(pc);
     assert(cb != NULL && cb == this, "");
+    ttyLocker ttyl;
     tty->print_cr("implicit exception happened at " INTPTR_FORMAT, p2i(pc));
     print();
     method()->print_codes();
@@ -2961,13 +2962,6 @@
                                               nul_chk_table_size());
 }
 
-void nmethod::print_code() {
-  HandleMark hm;
-  ResourceMark m;
-  Disassembler::decode(this);
-}
-
-
 #ifndef PRODUCT
 
 void nmethod::print_scopes() {
--- a/hotspot/src/share/vm/code/nmethod.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/code/nmethod.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -704,7 +704,6 @@
 
   // printing support
   void print()                          const;
-  void print_code();
   void print_relocations()                        PRODUCT_RETURN;
   void print_pcs()                                PRODUCT_RETURN;
   void print_scopes()                             PRODUCT_RETURN;
--- a/hotspot/src/share/vm/compiler/compileBroker.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/compiler/compileBroker.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -227,6 +227,11 @@
 CompileTaskWrapper::CompileTaskWrapper(CompileTask* task) {
   CompilerThread* thread = CompilerThread::current();
   thread->set_task(task);
+#if INCLUDE_JVMCI
+  if (task->is_blocking() && CompileBroker::compiler(task->comp_level())->is_jvmci()) {
+    task->set_jvmci_compiler_thread(thread);
+  }
+#endif
   CompileLog*     log  = thread->log();
   if (log != NULL)  task->log_task_start(log);
 }
@@ -245,10 +250,12 @@
       MutexLocker notifier(task->lock(), thread);
       task->mark_complete();
 #if INCLUDE_JVMCI
-      if (CompileBroker::compiler(task->comp_level())->is_jvmci() &&
-        !task->has_waiter()) {
-        // The waiting thread timed out and thus did not free the task.
-        free_task = true;
+      if (CompileBroker::compiler(task->comp_level())->is_jvmci()) {
+        if (!task->has_waiter()) {
+          // The waiting thread timed out and thus did not free the task.
+          free_task = true;
+        }
+        task->set_jvmci_compiler_thread(NULL);
       }
 #endif
       if (!free_task) {
@@ -1332,11 +1339,56 @@
   return new_task;
 }
 
-// 1 second should be long enough to complete most JVMCI compilations
-// and not too long to stall a blocking JVMCI compilation that
-// is trying to acquire a lock held by the app thread that submitted the
-// compilation.
-static const long BLOCKING_JVMCI_COMPILATION_TIMEOUT = 1000;
+#if INCLUDE_JVMCI
+// The number of milliseconds to wait before checking if the
+// JVMCI compiler thread is blocked.
+static const long BLOCKING_JVMCI_COMPILATION_WAIT_TIMESLICE = 500;
+
+// The number of successive times the above check is allowed to
+// see a blocked JVMCI compiler thread before unblocking the
+// thread waiting for the compilation to finish.
+static const int BLOCKING_JVMCI_COMPILATION_WAIT_TO_UNBLOCK_ATTEMPTS = 5;
+
+/**
+ * Waits for a JVMCI compiler to complete a given task. This thread
+ * waits until either the task completes or it sees the JVMCI compiler
+ * thread is blocked for N consecutive milliseconds where N is
+ * BLOCKING_JVMCI_COMPILATION_WAIT_TIMESLICE *
+ * BLOCKING_JVMCI_COMPILATION_WAIT_TO_UNBLOCK_ATTEMPTS.
+ *
+ * @return true if this thread needs to free/recycle the task
+ */
+bool CompileBroker::wait_for_jvmci_completion(CompileTask* task, JavaThread* thread) {
+  MutexLocker waiter(task->lock(), thread);
+  int consecutively_blocked = 0;
+  while (task->lock()->wait(!Mutex::_no_safepoint_check_flag, BLOCKING_JVMCI_COMPILATION_WAIT_TIMESLICE)) {
+    CompilerThread* jvmci_compiler_thread = task->jvmci_compiler_thread();
+    if (jvmci_compiler_thread != NULL) {
+      JavaThreadState state;
+      {
+        // A JVMCI compiler thread should not disappear at this point
+        // but let's be extra safe.
+        MutexLocker mu(Threads_lock, thread);
+        state = jvmci_compiler_thread->thread_state();
+      }
+      if (state == _thread_blocked) {
+        if (++consecutively_blocked == BLOCKING_JVMCI_COMPILATION_WAIT_TO_UNBLOCK_ATTEMPTS) {
+          if (PrintCompilation) {
+            task->print(tty, "wait for blocking compilation timed out");
+          }
+          break;
+        }
+      } else {
+        consecutively_blocked = 0;
+      }
+    } else {
+      // Still waiting on JVMCI compiler queue
+    }
+  }
+  task->clear_waiter();
+  return task->is_complete();
+}
+#endif
 
 /**
  *  Wait for the compilation task to complete.
@@ -1356,16 +1408,7 @@
   bool free_task;
 #if INCLUDE_JVMCI
   if (compiler(task->comp_level())->is_jvmci()) {
-    MutexLocker waiter(task->lock(), thread);
-    // No need to check if compilation has completed - just
-    // rely on the time out. The JVMCI compiler thread will
-    // recycle the CompileTask.
-    task->lock()->wait(!Mutex::_no_safepoint_check_flag, BLOCKING_JVMCI_COMPILATION_TIMEOUT);
-    // If the compilation completes while has_waiter is true then
-    // this thread is responsible for freeing the task.  Otherwise
-    // the compiler thread will free the task.
-    task->clear_waiter();
-    free_task = task->is_complete();
+    free_task = wait_for_jvmci_completion(task, thread);
   } else
 #endif
   {
--- a/hotspot/src/share/vm/compiler/compileBroker.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/compiler/compileBroker.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -233,6 +233,9 @@
                                           const char*         comment,
                                           bool                blocking);
   static void wait_for_completion(CompileTask* task);
+#if INCLUDE_JVMCI
+  static bool wait_for_jvmci_completion(CompileTask* task, JavaThread* thread);
+#endif
 
   static void invoke_compiler_on_method(CompileTask* task);
   static void post_compile(CompilerThread* thread, CompileTask* task, EventCompilation& event, bool success, ciEnv* ci_env);
--- a/hotspot/src/share/vm/compiler/compileTask.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/compiler/compileTask.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -91,6 +91,7 @@
   _osr_bci = osr_bci;
   _is_blocking = is_blocking;
   JVMCI_ONLY(_has_waiter = CompileBroker::compiler(comp_level)->is_jvmci();)
+  JVMCI_ONLY(_jvmci_compiler_thread = NULL;)
   _comp_level = comp_level;
   _num_inlined_bytecodes = 0;
 
--- a/hotspot/src/share/vm/compiler/compileTask.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/compiler/compileTask.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -56,6 +56,8 @@
   bool         _is_blocking;
 #if INCLUDE_JVMCI
   bool         _has_waiter;
+  // Compiler thread for a blocking JVMCI compilation
+  CompilerThread* _jvmci_compiler_thread;
 #endif
   int          _comp_level;
   int          _num_inlined_bytecodes;
@@ -92,6 +94,12 @@
 #if INCLUDE_JVMCI
   bool         has_waiter() const                { return _has_waiter; }
   void         clear_waiter()                    { _has_waiter = false; }
+  CompilerThread* jvmci_compiler_thread() const  { return _jvmci_compiler_thread; }
+  void         set_jvmci_compiler_thread(CompilerThread* t) {
+    assert(is_blocking(), "must be");
+    assert((t == NULL) != (_jvmci_compiler_thread == NULL), "must be");
+    _jvmci_compiler_thread = t;
+  }
 #endif
 
   nmethodLocker* code_handle() const             { return _code_handle; }
--- a/hotspot/src/share/vm/compiler/compilerDirectives.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/compiler/compilerDirectives.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -164,20 +164,15 @@
 
 DirectiveSet* CompilerDirectives::get_for(AbstractCompiler *comp) {
   assert(DirectivesStack_lock->owned_by_self(), "");
-  inc_refcount(); // The compiling thread is responsible to decrement this when finished.
   if (comp == NULL) { // Xint
     return _c1_store;
-  } else if (comp->is_c2()) {
+  } else  if (comp->is_c2()) {
     return _c2_store;
-  } else if (comp->is_c1()) {
+  } else {
+    // use c1_store as default
+    assert(comp->is_c1() || comp->is_jvmci() || comp->is_shark(), "");
     return _c1_store;
-  } else if (comp->is_shark()) {
-    return NULL;
-  } else if (comp->is_jvmci()) {
-    return NULL;
   }
-  ShouldNotReachHere();
-  return NULL;
 }
 
 // In the list of disabled intrinsics, the ID of the disabled intrinsics can separated:
@@ -459,6 +454,7 @@
   MutexLockerEx locker(DirectivesStack_lock, Mutex::_no_safepoint_check_flag);
 
   assert(_bottom != NULL, "Must never be empty");
+  _bottom->inc_refcount();
   return _bottom->get_for(comp);
 }
 
@@ -521,12 +517,13 @@
 }
 
 void DirectivesStack::release(DirectiveSet* set) {
+  assert(set != NULL, "Never NULL");
   MutexLockerEx locker(DirectivesStack_lock, Mutex::_no_safepoint_check_flag);
   if (set->is_exclusive_copy()) {
     // Old CompilecCmmands forced us to create an exclusive copy
     delete set;
   } else {
-    assert(set->directive() != NULL, "");
+    assert(set->directive() != NULL, "Never NULL");
     release(set->directive());
   }
 }
@@ -553,26 +550,18 @@
     while (dir != NULL) {
       if (dir->is_default_directive() || dir->match(method)) {
         match = dir->get_for(comp);
-        if (match == NULL) {
-          // temporary workaround for compilers without directives.
-          if (dir->is_default_directive()) {
-            // default dir is always enabled
-            // match c1 store - it contains all common flags even if C1 is unavailable
-            match = dir->_c1_store;
-            break;
-          }
-        } else {
-          if (match->EnableOption) {
-            // The directiveSet for this compile is also enabled -> success
-            break;
-          }
+        assert(match != NULL, "Consistency");
+        if (match->EnableOption) {
+          // The directiveSet for this compile is also enabled -> success
+          dir->inc_refcount();
+          break;
         }
       }
       dir = dir->next();
     }
   }
+  guarantee(match != NULL, "There should always be a default directive that matches");
 
-  guarantee(match != NULL, "There should always be a default directive that matches");
   // Check for legacy compile commands update, without DirectivesStack_lock
   return match->compilecommand_compatibility_init(method);
 }
--- a/hotspot/src/share/vm/compiler/disassembler.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/compiler/disassembler.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -513,6 +513,7 @@
 
 
 void Disassembler::decode(CodeBlob* cb, outputStream* st) {
+  ttyLocker ttyl;
   if (!load_library())  return;
   if (cb->is_nmethod()) {
     decode((nmethod*)cb, st);
@@ -526,12 +527,14 @@
 }
 
 void Disassembler::decode(address start, address end, outputStream* st, CodeStrings c) {
+  ttyLocker ttyl;
   if (!load_library())  return;
   decode_env env(CodeCache::find_blob_unsafe(start), st, c);
   env.decode_instructions(start, end);
 }
 
 void Disassembler::decode(nmethod* nm, outputStream* st) {
+  ttyLocker ttyl;
   if (!load_library())  return;
   decode_env env(nm, st);
   env.output()->print_cr("----------------------------------------------------------------------");
--- a/hotspot/src/share/vm/gc/shared/threadLocalAllocBuffer.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/gc/shared/threadLocalAllocBuffer.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -105,7 +105,7 @@
 // an illusion of a contiguous Eden and optionally retires the tlab.
 // Waste accounting should be done in caller as appropriate; see,
 // for example, clear_before_allocation().
-void ThreadLocalAllocBuffer::make_parsable(bool retire) {
+void ThreadLocalAllocBuffer::make_parsable(bool retire, bool zap) {
   if (end() != NULL) {
     invariants();
 
@@ -113,7 +113,7 @@
       myThread()->incr_allocated_bytes(used_bytes());
     }
 
-    CollectedHeap::fill_with_object(top(), hard_end(), retire);
+    CollectedHeap::fill_with_object(top(), hard_end(), retire && zap);
 
     if (retire || ZeroTLAB) {  // "Reset" the TLAB
       set_start(NULL);
--- a/hotspot/src/share/vm/gc/shared/threadLocalAllocBuffer.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/gc/shared/threadLocalAllocBuffer.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -145,8 +145,8 @@
   // Initialization at startup
   static void startup_initialization();
 
-  // Make an in-use tlab parsable, optionally also retiring it.
-  void make_parsable(bool retire);
+  // Make an in-use tlab parsable, optionally retiring and/or zapping it.
+  void make_parsable(bool retire, bool zap = true);
 
   // Retire in-use tlab before allocation of a new tlab
   void clear_before_allocation();
--- a/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -1255,6 +1255,7 @@
         } else {
           // debugging suppport
           if (PrintSignatureHandlers && (handler != Interpreter::slow_signature_handler())) {
+            ttyLocker ttyl;
             tty->cr();
             tty->print_cr("argument handler #%d for: %s %s (fingerprint = " UINT64_FORMAT ", %d bytes generated)",
                           _handlers->length(),
--- a/hotspot/src/share/vm/interpreter/linkResolver.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/interpreter/linkResolver.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -447,6 +447,7 @@
         assert(result->intrinsic_id() != vmIntrinsics::_invokeGeneric, "wrong place to find this");
         assert(basic_signature == result->signature(), "predict the result signature");
         if (TraceMethodHandles) {
+          ttyLocker ttyl;
           tty->print("lookup_polymorphic_method => intrinsic ");
           result->print_on(tty);
         }
@@ -479,6 +480,7 @@
                                                             &method_type,
                                                             CHECK_NULL);
       if (TraceMethodHandles) {
+        ttyLocker ttyl;
         tty->print("lookup_polymorphic_method => (via Java) ");
         result->print_on(tty);
         tty->print("  lookup_polymorphic_method => appendix = ");
@@ -1585,10 +1587,11 @@
   }
 
   if (TraceMethodHandles) {
-      ResourceMark rm(THREAD);
-      tty->print_cr("resolve_invokedynamic #%d %s %s",
+    ResourceMark rm(THREAD);
+    tty->print_cr("resolve_invokedynamic #%d %s %s in %s",
                   ConstantPool::decode_invokedynamic_index(index),
-                  method_name->as_C_string(), method_signature->as_C_string());
+                  method_name->as_C_string(), method_signature->as_C_string(),
+                  current_klass->name()->as_C_string());
     tty->print("  BSM info: "); bootstrap_specifier->print();
   }
 
--- a/hotspot/src/share/vm/jvmci/jvmciCompiler.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/jvmci/jvmciCompiler.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -162,10 +162,7 @@
     Handle exception(THREAD, PENDING_EXCEPTION);
     CLEAR_PENDING_EXCEPTION;
 
-    {
-      ttyLocker ttyl;
-      java_lang_Throwable::print_stack_trace(exception, tty);
-    }
+    java_lang_Throwable::java_printStackTrace(exception, THREAD);
 
     // Something went wrong so disable compilation at this level
     method->set_not_compilable(CompLevel_full_optimization);
@@ -181,11 +178,7 @@
   Thread* THREAD = Thread::current();
   CLEAR_PENDING_EXCEPTION;
 
-  {
-    ttyLocker ttyl;
-    tty->print_raw_cr(message);
-    java_lang_Throwable::print_stack_trace(exception, tty);
-  }
+  java_lang_Throwable::java_printStackTrace(exception, THREAD);
 
   // Give other aborting threads to also print their stack traces.
   // This can be very useful when debugging class initialization
--- a/hotspot/src/share/vm/jvmci/jvmciCompilerToVM.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/jvmci/jvmciCompilerToVM.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -897,10 +897,8 @@
     if (!nm->is_alive()) {
       return NULL;
     }
-    Disassembler::decode(nm, &st);
-  } else {
-    Disassembler::decode(cb, &st);
   }
+  Disassembler::decode(cb, &st);
   if (st.size() <= 0) {
     return NULL;
   }
--- a/hotspot/src/share/vm/oops/cpCache.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/oops/cpCache.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -306,6 +306,7 @@
                    adapter->size_of_parameters());
 
   if (TraceInvokeDynamic) {
+    ttyLocker ttyl;
     tty->print_cr("set_method_handle bc=%d appendix=" PTR_FORMAT "%s method_type=" PTR_FORMAT "%s method=" PTR_FORMAT " ",
                   invoke_code,
                   p2i(appendix()),    (has_appendix    ? "" : " (unused)"),
@@ -357,6 +358,7 @@
   set_bytecode_1(invoke_code);
   NOT_PRODUCT(verify(tty));
   if (TraceInvokeDynamic) {
+    ttyLocker ttyl;
     this->print(tty, 0);
   }
 }
--- a/hotspot/src/share/vm/oops/klass.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/oops/klass.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -44,6 +44,20 @@
 #include "gc/g1/g1SATBCardTableModRefBS.hpp"
 #endif // INCLUDE_ALL_GCS
 
+bool Klass::is_cloneable() const {
+  return _access_flags.is_cloneable_fast() ||
+         is_subtype_of(SystemDictionary::Cloneable_klass());
+}
+
+void Klass::set_is_cloneable() {
+  if (name() != vmSymbols::java_lang_invoke_MemberName()) {
+    _access_flags.set_is_cloneable_fast();
+  } else {
+    assert(is_final(), "no subclasses allowed");
+    // MemberName cloning should not be intrinsified and always happen in JVM_Clone.
+  }
+}
+
 void Klass::set_name(Symbol* n) {
   _name = n;
   if (_name != NULL) _name->increment_refcount();
--- a/hotspot/src/share/vm/oops/klass.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/oops/klass.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -524,13 +524,14 @@
   bool has_final_method() const         { return _access_flags.has_final_method(); }
   void set_has_finalizer()              { _access_flags.set_has_finalizer(); }
   void set_has_final_method()           { _access_flags.set_has_final_method(); }
-  bool is_cloneable() const             { return _access_flags.is_cloneable(); }
-  void set_is_cloneable()               { _access_flags.set_is_cloneable(); }
   bool has_vanilla_constructor() const  { return _access_flags.has_vanilla_constructor(); }
   void set_has_vanilla_constructor()    { _access_flags.set_has_vanilla_constructor(); }
   bool has_miranda_methods () const     { return access_flags().has_miranda_methods(); }
   void set_has_miranda_methods()        { _access_flags.set_has_miranda_methods(); }
 
+  bool is_cloneable() const;
+  void set_is_cloneable();
+
   // Biased locking support
   // Note: the prototype header is always set up to be at least the
   // prototype markOop. If biased locking is enabled it may further be
--- a/hotspot/src/share/vm/oops/method.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/oops/method.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -1200,8 +1200,10 @@
   m->set_vtable_index(Method::nonvirtual_vtable_index);
   m->link_method(m, CHECK_(empty));
 
-  if (TraceMethodHandles && (Verbose || WizardMode))
+  if (TraceMethodHandles && (Verbose || WizardMode)) {
+    ttyLocker ttyl;
     m->print_on(tty);
+  }
 
   return m;
 }
--- a/hotspot/src/share/vm/opto/addnode.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/addnode.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -52,7 +52,7 @@
 
 //------------------------------Identity---------------------------------------
 // If either input is a constant 0, return the other input.
-Node *AddNode::Identity( PhaseTransform *phase ) {
+Node* AddNode::Identity(PhaseGVN* phase) {
   const Type *zero = add_id();  // The additive identity
   if( phase->type( in(1) )->higher_equal( zero ) ) return in(2);
   if( phase->type( in(2) )->higher_equal( zero ) ) return in(1);
@@ -204,7 +204,7 @@
 //------------------------------Value-----------------------------------------
 // An add node sums it's two _in.  If one input is an RSD, we must mixin
 // the other input's symbols.
-const Type *AddNode::Value( PhaseTransform *phase ) const {
+const Type* AddNode::Value(PhaseGVN* phase) const {
   // Either input is TOP ==> the result is TOP
   const Type *t1 = phase->type( in(1) );
   const Type *t2 = phase->type( in(2) );
@@ -326,7 +326,7 @@
 
 //------------------------------Identity---------------------------------------
 // Fold (x-y)+y  OR  y+(x-y)  into  x
-Node *AddINode::Identity( PhaseTransform *phase ) {
+Node* AddINode::Identity(PhaseGVN* phase) {
   if( in(1)->Opcode() == Op_SubI && phase->eqv(in(1)->in(2),in(2)) ) {
     return in(1)->in(1);
   }
@@ -443,7 +443,7 @@
 
 //------------------------------Identity---------------------------------------
 // Fold (x-y)+y  OR  y+(x-y)  into  x
-Node *AddLNode::Identity( PhaseTransform *phase ) {
+Node* AddLNode::Identity(PhaseGVN* phase) {
   if( in(1)->Opcode() == Op_SubL && phase->eqv(in(1)->in(2),in(2)) ) {
     return in(1)->in(1);
   }
@@ -561,7 +561,7 @@
 //=============================================================================
 //------------------------------Identity---------------------------------------
 // If one input is a constant 0, return the other input.
-Node *AddPNode::Identity( PhaseTransform *phase ) {
+Node* AddPNode::Identity(PhaseGVN* phase) {
   return ( phase->type( in(Offset) )->higher_equal( TypeX_ZERO ) ) ? in(Address) : this;
 }
 
@@ -659,7 +659,7 @@
 }
 
 //------------------------------Value------------------------------------------
-const Type *AddPNode::Value( PhaseTransform *phase ) const {
+const Type* AddPNode::Value(PhaseGVN* phase) const {
   // Either input is TOP ==> the result is TOP
   const Type *t1 = phase->type( in(Address) );
   const Type *t2 = phase->type( in(Offset) );
@@ -733,7 +733,7 @@
 
 //=============================================================================
 //------------------------------Identity---------------------------------------
-Node *OrINode::Identity( PhaseTransform *phase ) {
+Node* OrINode::Identity(PhaseGVN* phase) {
   // x | x => x
   if (phase->eqv(in(1), in(2))) {
     return in(1);
@@ -774,7 +774,7 @@
 
 //=============================================================================
 //------------------------------Identity---------------------------------------
-Node *OrLNode::Identity( PhaseTransform *phase ) {
+Node* OrLNode::Identity(PhaseGVN* phase) {
   // x | x => x
   if (phase->eqv(in(1), in(2))) {
     return in(1);
--- a/hotspot/src/share/vm/opto/addnode.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/addnode.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -47,7 +47,7 @@
 
   // Handle algebraic identities here.  If we have an identity, return the Node
   // we are equivalent to.  We look for "add of zero" as an identity.
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual Node* Identity(PhaseGVN* phase);
 
   // We also canonicalize the Node, moving constants to the right input,
   // and flatten expressions (so that 1+x+2 becomes x+3).
@@ -55,7 +55,7 @@
 
   // Compute a new Type for this node.  Basically we just do the pre-check,
   // then call the virtual add() to set the type.
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
 
   // Check if this addition involves the additive identity
   virtual const Type *add_of_identity( const Type *t1, const Type *t2 ) const;
@@ -80,7 +80,7 @@
   virtual const Type *add_id() const { return TypeInt::ZERO; }
   virtual const Type *bottom_type() const { return TypeInt::INT; }
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual Node* Identity(PhaseGVN* phase);
   virtual uint ideal_reg() const { return Op_RegI; }
 };
 
@@ -94,7 +94,7 @@
   virtual const Type *add_id() const { return TypeLong::ZERO; }
   virtual const Type *bottom_type() const { return TypeLong::LONG; }
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual Node* Identity(PhaseGVN* phase);
   virtual uint ideal_reg() const { return Op_RegL; }
 };
 
@@ -109,7 +109,7 @@
   virtual const Type *add_ring( const Type *, const Type * ) const;
   virtual const Type *add_id() const { return TypeF::ZERO; }
   virtual const Type *bottom_type() const { return Type::FLOAT; }
-  virtual Node *Identity( PhaseTransform *phase ) { return this; }
+  virtual Node* Identity(PhaseGVN* phase) { return this; }
   virtual uint ideal_reg() const { return Op_RegF; }
 };
 
@@ -124,7 +124,7 @@
   virtual const Type *add_ring( const Type *, const Type * ) const;
   virtual const Type *add_id() const { return TypeD::ZERO; }
   virtual const Type *bottom_type() const { return Type::DOUBLE; }
-  virtual Node *Identity( PhaseTransform *phase ) { return this; }
+  virtual Node* Identity(PhaseGVN* phase) { return this; }
   virtual uint ideal_reg() const { return Op_RegD; }
 };
 
@@ -142,9 +142,9 @@
     init_class_id(Class_AddP);
   }
   virtual int Opcode() const;
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual Node* Identity(PhaseGVN* phase);
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   virtual const Type *bottom_type() const;
   virtual uint  ideal_reg() const { return Op_RegP; }
   Node         *base_node() { assert( req() > Base, "Missing base"); return in(Base); }
@@ -170,7 +170,7 @@
   virtual const Type *add_ring( const Type *, const Type * ) const;
   virtual const Type *add_id() const { return TypeInt::ZERO; }
   virtual const Type *bottom_type() const { return TypeInt::INT; }
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual Node* Identity(PhaseGVN* phase);
   virtual uint ideal_reg() const { return Op_RegI; }
 };
 
@@ -184,7 +184,7 @@
   virtual const Type *add_ring( const Type *, const Type * ) const;
   virtual const Type *add_id() const { return TypeLong::ZERO; }
   virtual const Type *bottom_type() const { return TypeLong::LONG; }
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual Node* Identity(PhaseGVN* phase);
   virtual uint ideal_reg() const { return Op_RegL; }
 };
 
--- a/hotspot/src/share/vm/opto/block.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/block.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -499,6 +499,7 @@
   void convert_NeverBranch_to_Goto(Block *b);
 
   CFGLoop* create_loop_tree();
+  bool is_dominator(Node* dom_node, Node* node);
 
   #ifndef PRODUCT
   bool _trace_opto_pipelining;  // tracing flag
--- a/hotspot/src/share/vm/opto/callnode.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/callnode.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -49,7 +49,7 @@
 uint StartNode::cmp( const Node &n ) const
 { return _domain == ((StartNode&)n)._domain; }
 const Type *StartNode::bottom_type() const { return _domain; }
-const Type *StartNode::Value(PhaseTransform *phase) const { return _domain; }
+const Type* StartNode::Value(PhaseGVN* phase) const { return _domain; }
 #ifndef PRODUCT
 void StartNode::dump_spec(outputStream *st) const { st->print(" #"); _domain->dump_on(st);}
 void StartNode::dump_compact_spec(outputStream *st) const { /* empty */ }
@@ -173,7 +173,7 @@
   return remove_dead_region(phase, can_reshape) ? this : NULL;
 }
 
-const Type *ReturnNode::Value( PhaseTransform *phase ) const {
+const Type* ReturnNode::Value(PhaseGVN* phase) const {
   return ( phase->type(in(TypeFunc::Control)) == Type::TOP)
     ? Type::TOP
     : Type::BOTTOM;
@@ -218,7 +218,7 @@
   return remove_dead_region(phase, can_reshape) ? this : NULL;
 }
 
-const Type *RethrowNode::Value( PhaseTransform *phase ) const {
+const Type* RethrowNode::Value(PhaseGVN* phase) const {
   return (phase->type(in(TypeFunc::Control)) == Type::TOP)
     ? Type::TOP
     : Type::BOTTOM;
@@ -685,7 +685,7 @@
 #endif
 
 const Type *CallNode::bottom_type() const { return tf()->range(); }
-const Type *CallNode::Value(PhaseTransform *phase) const {
+const Type* CallNode::Value(PhaseGVN* phase) const {
   if (phase->type(in(0)) == Type::TOP)  return Type::TOP;
   return tf()->range();
 }
@@ -1133,7 +1133,7 @@
 
 //------------------------------Identity---------------------------------------
 // Remove obviously duplicate safepoints
-Node *SafePointNode::Identity( PhaseTransform *phase ) {
+Node* SafePointNode::Identity(PhaseGVN* phase) {
 
   // If you have back to back safepoints, remove one
   if( in(TypeFunc::Control)->is_SafePoint() )
@@ -1156,7 +1156,7 @@
 }
 
 //------------------------------Value------------------------------------------
-const Type *SafePointNode::Value( PhaseTransform *phase ) const {
+const Type* SafePointNode::Value(PhaseGVN* phase) const {
   if( phase->type(in(0)) == Type::TOP ) return Type::TOP;
   if( phase->eqv( in(0), this ) ) return Type::TOP; // Dead infinite loop
   return Type::CONTROL;
--- a/hotspot/src/share/vm/opto/callnode.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/callnode.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -76,7 +76,7 @@
   virtual bool pinned() const { return true; };
   virtual const Type *bottom_type() const;
   virtual const TypePtr *adr_type() const { return TypePtr::BOTTOM; }
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
   virtual void  calling_convention( BasicType* sig_bt, VMRegPair *parm_reg, uint length ) const;
   virtual const RegMask &in_RegMask(uint) const;
@@ -127,7 +127,7 @@
   virtual uint hash() const { return NO_HASH; }  // CFG nodes do not hash
   virtual bool depends_only_on_test() const { return false; }
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   virtual uint ideal_reg() const { return NotAMachineReg; }
   virtual uint match_edge(uint idx) const;
 #ifndef PRODUCT
@@ -148,7 +148,7 @@
   virtual uint hash() const { return NO_HASH; }  // CFG nodes do not hash
   virtual bool depends_only_on_test() const { return false; }
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   virtual uint match_edge(uint idx) const;
   virtual uint ideal_reg() const { return NotAMachineReg; }
 #ifndef PRODUCT
@@ -465,11 +465,11 @@
   // Standard Node stuff
   virtual int            Opcode() const;
   virtual bool           pinned() const { return true; }
-  virtual const Type    *Value( PhaseTransform *phase ) const;
+  virtual const Type*    Value(PhaseGVN* phase) const;
   virtual const Type    *bottom_type() const { return Type::CONTROL; }
   virtual const TypePtr *adr_type() const { return _adr_type; }
   virtual Node          *Ideal(PhaseGVN *phase, bool can_reshape);
-  virtual Node          *Identity( PhaseTransform *phase );
+  virtual Node*          Identity(PhaseGVN* phase);
   virtual uint           ideal_reg() const { return 0; }
   virtual const RegMask &in_RegMask(uint) const;
   virtual const RegMask &out_RegMask() const;
@@ -593,9 +593,9 @@
   void set_generator(CallGenerator* cg) { _generator = cg; }
 
   virtual const Type *bottom_type() const;
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
-  virtual Node *Identity( PhaseTransform *phase ) { return this; }
+  virtual Node* Identity(PhaseGVN* phase) { return this; }
   virtual uint        cmp( const Node &n ) const;
   virtual uint        size_of() const = 0;
   virtual void        calling_convention( BasicType* sig_bt, VMRegPair *parm_regs, uint argcnt ) const;
--- a/hotspot/src/share/vm/opto/castnode.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/castnode.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -24,6 +24,7 @@
 
 #include "precompiled.hpp"
 #include "opto/addnode.hpp"
+#include "opto/callnode.hpp"
 #include "opto/castnode.hpp"
 #include "opto/connode.hpp"
 #include "opto/matcher.hpp"
@@ -33,14 +34,22 @@
 
 //=============================================================================
 // If input is already higher or equal to cast type, then this is an identity.
-Node *ConstraintCastNode::Identity( PhaseTransform *phase ) {
+Node* ConstraintCastNode::Identity(PhaseGVN* phase) {
+  Node* dom = dominating_cast(phase);
+  if (dom != NULL) {
+    assert(_carry_dependency, "only for casts that carry a dependency");
+    return dom;
+  }
+  if (_carry_dependency) {
+    return this;
+  }
   return phase->type(in(1))->higher_equal_speculative(_type) ? in(1) : this;
 }
 
 //------------------------------Value------------------------------------------
 // Take 'join' of input and cast-up type
-const Type *ConstraintCastNode::Value( PhaseTransform *phase ) const {
-  if( in(0) && phase->type(in(0)) == Type::TOP ) return Type::TOP;
+const Type* ConstraintCastNode::Value(PhaseGVN* phase) const {
+  if (in(0) && phase->type(in(0)) == Type::TOP) return Type::TOP;
   const Type* ft = phase->type(in(1))->filter_speculative(_type);
 
 #ifdef ASSERT
@@ -69,26 +78,78 @@
 //------------------------------Ideal------------------------------------------
 // Return a node which is more "ideal" than the current node.  Strip out
 // control copies
-Node *ConstraintCastNode::Ideal(PhaseGVN *phase, bool can_reshape){
+Node *ConstraintCastNode::Ideal(PhaseGVN *phase, bool can_reshape) {
   return (in(0) && remove_dead_region(phase, can_reshape)) ? this : NULL;
 }
 
-uint CastIINode::size_of() const {
+uint ConstraintCastNode::cmp(const Node &n) const {
+  return TypeNode::cmp(n) && ((ConstraintCastNode&)n)._carry_dependency == _carry_dependency;
+}
+
+uint ConstraintCastNode::size_of() const {
   return sizeof(*this);
 }
 
-uint CastIINode::cmp(const Node &n) const {
-  return TypeNode::cmp(n) && ((CastIINode&)n)._carry_dependency == _carry_dependency;
+Node* ConstraintCastNode::make_cast(int opcode, Node* c, Node *n, const Type *t, bool carry_dependency) {
+  switch(opcode) {
+  case Op_CastII: {
+    Node* cast = new CastIINode(n, t, carry_dependency);
+    cast->set_req(0, c);
+    return cast;
+  }
+  case Op_CastPP: {
+    Node* cast = new CastPPNode(n, t, carry_dependency);
+    cast->set_req(0, c);
+    return cast;
+  }
+  case Op_CheckCastPP: return new CheckCastPPNode(c, n, t, carry_dependency);
+  default:
+    fatal("Bad opcode %d", opcode);
+  }
+  return NULL;
 }
 
-Node *CastIINode::Identity(PhaseTransform *phase) {
-  if (_carry_dependency) {
-    return this;
+TypeNode* ConstraintCastNode::dominating_cast(PhaseTransform *phase) const {
+  if (!carry_dependency()) {
+    return NULL;
+  }
+  Node* val = in(1);
+  Node* ctl = in(0);
+  int opc = Opcode();
+  if (ctl == NULL) {
+    return NULL;
   }
-  return ConstraintCastNode::Identity(phase);
+  for (DUIterator_Fast imax, i = val->fast_outs(imax); i < imax; i++) {
+    Node* u = val->fast_out(i);
+    if (u != this &&
+        u->Opcode() == opc &&
+        u->in(0) != NULL &&
+        u->bottom_type()->higher_equal(type())) {
+      if (phase->is_dominator(u->in(0), ctl)) {
+        return u->as_Type();
+      }
+      if (is_CheckCastPP() && u->in(1)->is_Proj() && u->in(1)->in(0)->is_Allocate() &&
+          u->in(0)->is_Proj() && u->in(0)->in(0)->is_Initialize() &&
+          u->in(1)->in(0)->as_Allocate()->initialization() == u->in(0)->in(0)) {
+        // CheckCastPP following an allocation always dominates all
+        // use of the allocation result
+        return u->as_Type();
+      }
+    }
+  }
+  return NULL;
 }
 
-const Type *CastIINode::Value(PhaseTransform *phase) const {
+#ifndef PRODUCT
+void ConstraintCastNode::dump_spec(outputStream *st) const {
+  TypeNode::dump_spec(st);
+  if (_carry_dependency) {
+    st->print(" carry dependency");
+  }
+}
+#endif
+
+const Type* CastIINode::Value(PhaseGVN* phase) const {
   const Type *res = ConstraintCastNode::Value(phase);
 
   // Try to improve the type of the CastII if we recognize a CmpI/If
@@ -154,19 +215,80 @@
   return res;
 }
 
-#ifndef PRODUCT
-void CastIINode::dump_spec(outputStream *st) const {
-  TypeNode::dump_spec(st);
-  if (_carry_dependency) {
-    st->print(" carry dependency");
+Node *CastIINode::Ideal(PhaseGVN *phase, bool can_reshape) {
+  Node* progress = ConstraintCastNode::Ideal(phase, can_reshape);
+  if (progress != NULL) {
+    return progress;
+  }
+
+  // transform:
+  // (CastII (AddI x const)) -> (AddI (CastII x) const)
+  // So the AddI has a chance to be optimized out
+  if (in(1)->Opcode() == Op_AddI) {
+    Node* in2 = in(1)->in(2);
+    const TypeInt* in2_t = phase->type(in2)->isa_int();
+    if (in2_t != NULL && in2_t->singleton()) {
+      int in2_const = in2_t->_lo;
+      const TypeInt* current_type = _type->is_int();
+      jlong new_lo_long = ((jlong)current_type->_lo) - in2_const;
+      jlong new_hi_long = ((jlong)current_type->_hi) - in2_const;
+      int new_lo = (int)new_lo_long;
+      int new_hi = (int)new_hi_long;
+      if (((jlong)new_lo) == new_lo_long && ((jlong)new_hi) == new_hi_long) {
+        Node* in1 = in(1)->in(1);
+        CastIINode* new_cast = (CastIINode*)clone();
+        AddINode* new_add = (AddINode*)in(1)->clone();
+        new_cast->set_type(TypeInt::make(new_lo, new_hi, current_type->_widen));
+        new_cast->set_req(1, in1);
+        new_add->set_req(1, phase->transform(new_cast));
+        return new_add;
+      }
+    }
   }
+  // Similar to ConvI2LNode::Ideal() for the same reasons
+  if (can_reshape && !phase->C->major_progress()) {
+    const TypeInt* this_type = this->type()->is_int();
+    const TypeInt* in_type = phase->type(in(1))->isa_int();
+    if (in_type != NULL && this_type != NULL &&
+        (in_type->_lo != this_type->_lo ||
+         in_type->_hi != this_type->_hi)) {
+      int lo1 = this_type->_lo;
+      int hi1 = this_type->_hi;
+      int w1  = this_type->_widen;
+
+      if (lo1 >= 0) {
+        // Keep a range assertion of >=0.
+        lo1 = 0;        hi1 = max_jint;
+      } else if (hi1 < 0) {
+        // Keep a range assertion of <0.
+        lo1 = min_jint; hi1 = -1;
+      } else {
+        lo1 = min_jint; hi1 = max_jint;
+      }
+      const TypeInt* wtype = TypeInt::make(MAX2(in_type->_lo, lo1),
+                                           MIN2(in_type->_hi, hi1),
+                                           MAX2((int)in_type->_widen, w1));
+      if (wtype != type()) {
+        set_type(wtype);
+        return this;
+      }
+    }
+  }
+  return NULL;
 }
-#endif
 
 //=============================================================================
 //------------------------------Identity---------------------------------------
 // If input is already higher or equal to cast type, then this is an identity.
-Node *CheckCastPPNode::Identity( PhaseTransform *phase ) {
+Node* CheckCastPPNode::Identity(PhaseGVN* phase) {
+  Node* dom = dominating_cast(phase);
+  if (dom != NULL) {
+    assert(_carry_dependency, "only for casts that carry a dependency");
+    return dom;
+  }
+  if (_carry_dependency) {
+    return this;
+  }
   // Toned down to rescue meeting at a Phi 3 different oops all implementing
   // the same interface.  CompileTheWorld starting at 502, kd12rc1.zip.
   return (phase->type(in(1)) == phase->type(this)) ? in(1) : this;
@@ -174,7 +296,7 @@
 
 //------------------------------Value------------------------------------------
 // Take 'join' of input and cast-up type, unless working with an Interface
-const Type *CheckCastPPNode::Value( PhaseTransform *phase ) const {
+const Type* CheckCastPPNode::Value(PhaseGVN* phase) const {
   if( in(0) && phase->type(in(0)) == Type::TOP ) return Type::TOP;
 
   const Type *inn = phase->type(in(1));
@@ -255,16 +377,9 @@
   // return join;
 }
 
-//------------------------------Ideal------------------------------------------
-// Return a node which is more "ideal" than the current node.  Strip out
-// control copies
-Node *CheckCastPPNode::Ideal(PhaseGVN *phase, bool can_reshape){
-  return (in(0) && remove_dead_region(phase, can_reshape)) ? this : NULL;
-}
-
 //=============================================================================
 //------------------------------Value------------------------------------------
-const Type *CastX2PNode::Value( PhaseTransform *phase ) const {
+const Type* CastX2PNode::Value(PhaseGVN* phase) const {
   const Type* t = phase->type(in(1));
   if (t == Type::TOP) return Type::TOP;
   if (t->base() == Type_X && t->singleton()) {
@@ -328,14 +443,14 @@
 }
 
 //------------------------------Identity---------------------------------------
-Node *CastX2PNode::Identity( PhaseTransform *phase ) {
+Node* CastX2PNode::Identity(PhaseGVN* phase) {
   if (in(1)->Opcode() == Op_CastP2X)  return in(1)->in(1);
   return this;
 }
 
 //=============================================================================
 //------------------------------Value------------------------------------------
-const Type *CastP2XNode::Value( PhaseTransform *phase ) const {
+const Type* CastP2XNode::Value(PhaseGVN* phase) const {
   const Type* t = phase->type(in(1));
   if (t == Type::TOP) return Type::TOP;
   if (t->base() == Type::RawPtr && t->singleton()) {
@@ -350,7 +465,7 @@
 }
 
 //------------------------------Identity---------------------------------------
-Node *CastP2XNode::Identity( PhaseTransform *phase ) {
+Node* CastP2XNode::Identity(PhaseGVN* phase) {
   if (in(1)->Opcode() == Op_CastX2P)  return in(1)->in(1);
   return this;
 }
--- a/hotspot/src/share/vm/opto/castnode.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/castnode.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -32,63 +32,68 @@
 //------------------------------ConstraintCastNode-----------------------------
 // cast to a different range
 class ConstraintCastNode: public TypeNode {
+  protected:
+  // Can this node be removed post CCP or does it carry a required dependency?
+  const bool _carry_dependency;
+  virtual uint cmp( const Node &n ) const;
+  virtual uint size_of() const;
+
   public:
-  ConstraintCastNode (Node *n, const Type *t ): TypeNode(t,2) {
+  ConstraintCastNode(Node *n, const Type *t, bool carry_dependency)
+    : TypeNode(t,2), _carry_dependency(carry_dependency) {
     init_class_id(Class_ConstraintCast);
     init_req(1, n);
   }
-  virtual Node *Identity( PhaseTransform *phase );
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual Node* Identity(PhaseGVN* phase);
+  virtual const Type* Value(PhaseGVN* phase) const;
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
   virtual int Opcode() const;
   virtual uint ideal_reg() const = 0;
+  virtual bool depends_only_on_test() const { return !_carry_dependency; }
+  bool carry_dependency() const { return _carry_dependency; }
+  TypeNode* dominating_cast(PhaseTransform *phase) const;
+  static Node* make_cast(int opcode,  Node* c, Node *n, const Type *t, bool carry_dependency);
+
+#ifndef PRODUCT
+  virtual void dump_spec(outputStream *st) const;
+#endif
 };
 
 //------------------------------CastIINode-------------------------------------
 // cast integer to integer (different range)
 class CastIINode: public ConstraintCastNode {
-  private:
-  // Can this node be removed post CCP or does it carry a required dependency?
-  const bool _carry_dependency;
-
-  protected:
-  virtual uint cmp( const Node &n ) const;
-  virtual uint size_of() const;
-
   public:
   CastIINode(Node *n, const Type *t, bool carry_dependency = false)
-    : ConstraintCastNode(n,t), _carry_dependency(carry_dependency) {}
+    : ConstraintCastNode(n, t, carry_dependency) {}
   virtual int Opcode() const;
   virtual uint ideal_reg() const { return Op_RegI; }
-  virtual Node *Identity( PhaseTransform *phase );
-  virtual const Type *Value( PhaseTransform *phase ) const;
-#ifndef PRODUCT
-  virtual void dump_spec(outputStream *st) const;
-#endif
+  virtual const Type* Value(PhaseGVN* phase) const;
+  virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
 };
 
 //------------------------------CastPPNode-------------------------------------
 // cast pointer to pointer (different type)
 class CastPPNode: public ConstraintCastNode {
   public:
-  CastPPNode (Node *n, const Type *t ): ConstraintCastNode(n, t) {}
+  CastPPNode (Node *n, const Type *t, bool carry_dependency = false)
+    : ConstraintCastNode(n, t, carry_dependency) {
+  }
   virtual int Opcode() const;
   virtual uint ideal_reg() const { return Op_RegP; }
 };
 
 //------------------------------CheckCastPPNode--------------------------------
 // for _checkcast, cast pointer to pointer (different type), without JOIN,
-class CheckCastPPNode: public TypeNode {
+class CheckCastPPNode: public ConstraintCastNode {
   public:
-  CheckCastPPNode( Node *c, Node *n, const Type *t ) : TypeNode(t,2) {
+  CheckCastPPNode(Node *c, Node *n, const Type *t, bool carry_dependency = false)
+    : ConstraintCastNode(n, t, carry_dependency) {
     init_class_id(Class_CheckCastPP);
     init_req(0, c);
-    init_req(1, n);
   }
 
-  virtual Node *Identity( PhaseTransform *phase );
-  virtual const Type *Value( PhaseTransform *phase ) const;
-  virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
+  virtual Node* Identity(PhaseGVN* phase);
+  virtual const Type* Value(PhaseGVN* phase) const;
   virtual int   Opcode() const;
   virtual uint  ideal_reg() const { return Op_RegP; }
 };
@@ -100,9 +105,9 @@
   public:
   CastX2PNode( Node *n ) : Node(NULL, n) {}
   virtual int Opcode() const;
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual Node* Identity(PhaseGVN* phase);
   virtual uint ideal_reg() const { return Op_RegP; }
   virtual const Type *bottom_type() const { return TypeRawPtr::BOTTOM; }
 };
@@ -114,9 +119,9 @@
   public:
   CastP2XNode( Node *ctrl, Node *n ) : Node(ctrl, n) {}
   virtual int Opcode() const;
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual Node* Identity(PhaseGVN* phase);
   virtual uint ideal_reg() const { return Op_RegX; }
   virtual const Type *bottom_type() const { return TypeX_X; }
   // Return false to keep node from moving away from an associated card mark.
--- a/hotspot/src/share/vm/opto/cfgnode.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/cfgnode.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -27,6 +27,7 @@
 #include "memory/allocation.inline.hpp"
 #include "oops/objArrayKlass.hpp"
 #include "opto/addnode.hpp"
+#include "opto/castnode.hpp"
 #include "opto/cfgnode.hpp"
 #include "opto/connode.hpp"
 #include "opto/convertnode.hpp"
@@ -47,7 +48,7 @@
 //=============================================================================
 //------------------------------Value------------------------------------------
 // Compute the type of the RegionNode.
-const Type *RegionNode::Value( PhaseTransform *phase ) const {
+const Type* RegionNode::Value(PhaseGVN* phase) const {
   for( uint i=1; i<req(); ++i ) {       // For all paths in
     Node *n = in(i);            // Get Control source
     if( !n ) continue;          // Missing inputs are TOP
@@ -59,7 +60,7 @@
 
 //------------------------------Identity---------------------------------------
 // Check for Region being Identity.
-Node *RegionNode::Identity( PhaseTransform *phase ) {
+Node* RegionNode::Identity(PhaseGVN* phase) {
   // Cannot have Region be an identity, even if it has only 1 input.
   // Phi users cannot have their Region input folded away for them,
   // since they need to select the proper data input
@@ -891,7 +892,7 @@
 
 //------------------------------Value------------------------------------------
 // Compute the type of the PhiNode
-const Type *PhiNode::Value( PhaseTransform *phase ) const {
+const Type* PhiNode::Value(PhaseGVN* phase) const {
   Node *r = in(0);              // RegionNode
   if( !r )                      // Copy or dead
     return in(1) ? phase->type(in(1)) : Type::TOP;
@@ -902,23 +903,25 @@
     return Type::TOP;
 
   // Check for trip-counted loop.  If so, be smarter.
-  CountedLoopNode *l = r->is_CountedLoop() ? r->as_CountedLoop() : NULL;
-  if( l && l->can_be_counted_loop(phase) &&
-      ((const Node*)l->phi() == this) ) { // Trip counted loop!
+  CountedLoopNode* l = r->is_CountedLoop() ? r->as_CountedLoop() : NULL;
+  if (l && l->can_be_counted_loop(phase) &&
+      ((const Node*)l->phi() == this)) { // Trip counted loop!
     // protect against init_trip() or limit() returning NULL
     const Node *init   = l->init_trip();
     const Node *limit  = l->limit();
-    if( init != NULL && limit != NULL && l->stride_is_con() ) {
-      const TypeInt *lo = init ->bottom_type()->isa_int();
-      const TypeInt *hi = limit->bottom_type()->isa_int();
-      if( lo && hi ) {            // Dying loops might have TOP here
-        int stride = l->stride_con();
-        if( stride < 0 ) {          // Down-counter loop
-          const TypeInt *tmp = lo; lo = hi; hi = tmp;
-          stride = -stride;
+    const Node* stride = l->stride();
+    if (init != NULL && limit != NULL && stride != NULL) {
+      const TypeInt* lo = phase->type(init)->isa_int();
+      const TypeInt* hi = phase->type(limit)->isa_int();
+      const TypeInt* stride_t = phase->type(stride)->isa_int();
+      if (lo != NULL && hi != NULL && stride_t != NULL) { // Dying loops might have TOP here
+        assert(stride_t->_hi >= stride_t->_lo, "bad stride type");
+        if (stride_t->_hi < 0) {          // Down-counter loop
+          swap(lo, hi);
+          return TypeInt::make(MIN2(lo->_lo, hi->_lo) , hi->_hi, 3);
+        } else if (stride_t->_lo >= 0) {
+          return TypeInt::make(lo->_lo, MAX2(lo->_hi, hi->_hi), 3);
         }
-        if( lo->_hi < hi->_lo )     // Reversed endpoints are well defined :-(
-          return TypeInt::make(lo->_lo,hi->_hi,3);
       }
     }
   }
@@ -1142,13 +1145,13 @@
 
 //------------------------------Identity---------------------------------------
 // Check for Region being Identity.
-Node *PhiNode::Identity( PhaseTransform *phase ) {
+Node* PhiNode::Identity(PhaseGVN* phase) {
   // Check for no merging going on
   // (There used to be special-case code here when this->region->is_Loop.
   // It would check for a tributary phi on the backedge that the main phi
   // trivially, perhaps with a single cast.  The unique_input method
   // does all this and more, by reducing such tributaries to 'this'.)
-  Node* uin = unique_input(phase);
+  Node* uin = unique_input(phase, false);
   if (uin != NULL) {
     return uin;
   }
@@ -1165,8 +1168,9 @@
 //-----------------------------unique_input------------------------------------
 // Find the unique value, discounting top, self-loops, and casts.
 // Return top if there are no inputs, and self if there are multiple.
-Node* PhiNode::unique_input(PhaseTransform* phase) {
-  //  1) One unique direct input, or
+Node* PhiNode::unique_input(PhaseTransform* phase, bool uncast) {
+  //  1) One unique direct input,
+  // or if uncast is true:
   //  2) some of the inputs have an intervening ConstraintCast and
   //     the type of input is the same or sharper (more specific)
   //     than the phi's type.
@@ -1180,8 +1184,7 @@
 
   Node* r = in(0);                      // RegionNode
   if (r == NULL)  return in(1);         // Already degraded to a Copy
-  Node* uncasted_input = NULL; // The unique uncasted input (ConstraintCasts removed)
-  Node* direct_input   = NULL; // The unique direct input
+  Node* input = NULL; // The unique direct input (maybe uncasted = ConstraintCasts removed)
 
   for (uint i = 1, cnt = req(); i < cnt; ++i) {
     Node* rc = r->in(i);
@@ -1190,34 +1193,23 @@
     Node* n = in(i);
     if (n == NULL)
       continue;
-    Node* un = n->uncast();
+    Node* un = uncast ? n->uncast() : n;
     if (un == NULL || un == this || phase->type(un) == Type::TOP) {
       continue; // ignore if top, or in(i) and "this" are in a data cycle
     }
-    // Check for a unique uncasted input
-    if (uncasted_input == NULL) {
-      uncasted_input = un;
-    } else if (uncasted_input != un) {
-      uncasted_input = NodeSentinel; // no unique uncasted input
-    }
-    // Check for a unique direct input
-    if (direct_input == NULL) {
-      direct_input = n;
-    } else if (direct_input != n) {
-      direct_input = NodeSentinel; // no unique direct input
+    // Check for a unique input (maybe uncasted)
+    if (input == NULL) {
+      input = un;
+    } else if (input != un) {
+      input = NodeSentinel; // no unique input
     }
   }
-  if (direct_input == NULL) {
+  if (input == NULL) {
     return phase->C->top();        // no inputs
   }
-  assert(uncasted_input != NULL,"");
 
-  if (direct_input != NodeSentinel) {
-    return direct_input;           // one unique direct input
-  }
-  if (uncasted_input != NodeSentinel &&
-      phase->type(uncasted_input)->higher_equal(type())) {
-    return uncasted_input;         // one unique uncasted input
+  if (input != NodeSentinel) {
+    return input;           // one unique direct input
   }
 
   // Nothing.
@@ -1650,7 +1642,12 @@
     return top;
   }
 
-  Node* uin = unique_input(phase);
+  bool uncasted = false;
+  Node* uin = unique_input(phase, false);
+  if (uin == NULL) {
+    uncasted = true;
+    uin = unique_input(phase, true);
+  }
   if (uin == top) {             // Simplest case: no alive inputs.
     if (can_reshape)            // IGVN transformation
       return top;
@@ -1683,6 +1680,31 @@
       }
     }
 
+    if (uncasted) {
+      const Type* phi_type = bottom_type();
+      assert(phi_type->isa_int() || phi_type->isa_ptr(), "bad phi type");
+      int opcode;
+      if (phi_type->isa_int()) {
+        opcode = Op_CastII;
+      } else {
+        const Type* uin_type = phase->type(uin);
+        if (phi_type->join(TypePtr::NOTNULL) == uin_type->join(TypePtr::NOTNULL)) {
+          opcode = Op_CastPP;
+        } else {
+          opcode = Op_CheckCastPP;
+        }
+      }
+      // Add a cast to carry the control dependency of the Phi that is
+      // going away
+      Node* cast = ConstraintCastNode::make_cast(opcode, r, uin, phi_type, true);
+      cast = phase->transform(cast);
+      // set all inputs to the new cast so the Phi is removed by Identity
+      for (uint i = 1; i < req(); i++) {
+        set_req(i, cast);
+      }
+      uin = cast;
+    }
+
     // One unique input.
     debug_only(Node* ident = Identity(phase));
     // The unique input must eventually be detected by the Identity call.
@@ -1699,7 +1721,6 @@
     return NULL;
   }
 
-
   Node* opt = NULL;
   int true_path = is_diamond_phi();
   if( true_path != 0 ) {
@@ -2048,13 +2069,13 @@
 
 
 //=============================================================================
-const Type *GotoNode::Value( PhaseTransform *phase ) const {
+const Type* GotoNode::Value(PhaseGVN* phase) const {
   // If the input is reachable, then we are executed.
   // If the input is not reachable, then we are not executed.
   return phase->type(in(0));
 }
 
-Node *GotoNode::Identity( PhaseTransform *phase ) {
+Node* GotoNode::Identity(PhaseGVN* phase) {
   return in(0);                // Simple copy of incoming control
 }
 
@@ -2116,7 +2137,7 @@
 //------------------------------Value------------------------------------------
 // Compute the type of the PCTableNode.  If reachable it is a tuple of
 // Control, otherwise the table targets are not reachable
-const Type *PCTableNode::Value( PhaseTransform *phase ) const {
+const Type* PCTableNode::Value(PhaseGVN* phase) const {
   if( phase->type(in(0)) == Type::CONTROL )
     return bottom_type();
   return Type::TOP;             // All paths dead?  Then so are we
@@ -2161,7 +2182,7 @@
 //------------------------------Value------------------------------------------
 // Check for being unreachable, or for coming from a Rethrow.  Rethrow's cannot
 // have the default "fall_through_index" path.
-const Type *CatchNode::Value( PhaseTransform *phase ) const {
+const Type* CatchNode::Value(PhaseGVN* phase) const {
   // Unreachable?  Then so are all paths from here.
   if( phase->type(in(0)) == Type::TOP ) return Type::TOP;
   // First assume all paths are reachable
@@ -2205,7 +2226,7 @@
 
 //------------------------------Identity---------------------------------------
 // If only 1 target is possible, choose it if it is the main control
-Node *CatchProjNode::Identity( PhaseTransform *phase ) {
+Node* CatchProjNode::Identity(PhaseGVN* phase) {
   // If my value is control and no other value is, then treat as ID
   const TypeTuple *t = phase->type(in(0))->is_tuple();
   if (t->field_at(_con) != Type::CONTROL)  return this;
@@ -2248,7 +2269,7 @@
 //=============================================================================
 //------------------------------Identity---------------------------------------
 // Check for CreateEx being Identity.
-Node *CreateExNode::Identity( PhaseTransform *phase ) {
+Node* CreateExNode::Identity(PhaseGVN* phase) {
   if( phase->type(in(1)) == Type::TOP ) return in(1);
   if( phase->type(in(0)) == Type::TOP ) return in(0);
   // We only come from CatchProj, unless the CatchProj goes away.
@@ -2264,7 +2285,7 @@
 //=============================================================================
 //------------------------------Value------------------------------------------
 // Check for being unreachable.
-const Type *NeverBranchNode::Value( PhaseTransform *phase ) const {
+const Type* NeverBranchNode::Value(PhaseGVN* phase) const {
   if (!in(0) || in(0)->is_top()) return Type::TOP;
   return bottom_type();
 }
--- a/hotspot/src/share/vm/opto/cfgnode.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/cfgnode.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -91,8 +91,8 @@
   virtual uint hash() const { return NO_HASH; }  // CFG nodes do not hash
   virtual bool depends_only_on_test() const { return false; }
   virtual const Type *bottom_type() const { return Type::CONTROL; }
-  virtual const Type *Value( PhaseTransform *phase ) const;
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual const Type* Value(PhaseGVN* phase) const;
+  virtual Node* Identity(PhaseGVN* phase);
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
   virtual const RegMask &out_RegMask() const;
   bool try_clean_mem_phi(PhaseGVN *phase);
@@ -175,7 +175,14 @@
 
   // Determine a unique non-trivial input, if any.
   // Ignore casts if it helps.  Return NULL on failure.
-  Node* unique_input(PhaseTransform *phase);
+  Node* unique_input(PhaseTransform *phase, bool uncast);
+  Node* unique_input(PhaseTransform *phase) {
+    Node* uin = unique_input(phase, false);
+    if (uin == NULL) {
+      uin = unique_input(phase, true);
+    }
+    return uin;
+  }
 
   // Check for a simple dead loop.
   enum LoopSafety { Safe = 0, Unsafe, UnsafeLoop };
@@ -198,8 +205,8 @@
            type()->higher_equal(tp);
   }
 
-  virtual const Type *Value( PhaseTransform *phase ) const;
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual const Type* Value(PhaseGVN* phase) const;
+  virtual Node* Identity(PhaseGVN* phase);
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
   virtual const RegMask &out_RegMask() const;
   virtual const RegMask &in_RegMask(uint) const;
@@ -227,8 +234,8 @@
   virtual const Node *is_block_proj() const { return this; }
   virtual bool depends_only_on_test() const { return false; }
   virtual const Type *bottom_type() const { return Type::CONTROL; }
-  virtual const Type *Value( PhaseTransform *phase ) const;
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual const Type* Value(PhaseGVN* phase) const;
+  virtual Node* Identity(PhaseGVN* phase);
   virtual const RegMask &out_RegMask() const;
 
 #ifndef PRODUCT
@@ -377,7 +384,7 @@
   virtual bool pinned() const { return true; }
   virtual const Type *bottom_type() const { return TypeTuple::IFBOTH; }
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   virtual int required_outcnt() const { return 2; }
   virtual const RegMask &out_RegMask() const;
   Node* fold_compares(PhaseIterGVN* phase);
@@ -411,7 +418,7 @@
 class IfProjNode : public CProjNode {
 public:
   IfProjNode(IfNode *ifnode, uint idx) : CProjNode(ifnode,idx) {}
-  virtual Node *Identity(PhaseTransform *phase);
+  virtual Node* Identity(PhaseGVN* phase);
 
 protected:
   // Type of If input when this branch is always taken
@@ -465,7 +472,7 @@
     init_req(1, idx);
   }
   virtual int Opcode() const;
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
   virtual const Type *bottom_type() const;
   virtual bool pinned() const { return true; }
@@ -525,7 +532,7 @@
     init_class_id(Class_Catch);
   }
   virtual int Opcode() const;
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
 };
 
 // CatchProjNode controls which exception handler is targetted after a call.
@@ -553,7 +560,7 @@
   }
 
   virtual int Opcode() const;
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual Node* Identity(PhaseGVN* phase);
   virtual const Type *bottom_type() const { return Type::CONTROL; }
   int  handler_bci() const        { return _handler_bci; }
   bool is_handler_proj() const    { return _handler_bci >= 0; }
@@ -572,7 +579,7 @@
     init_req(1, i_o);
   }
   virtual int Opcode() const;
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual Node* Identity(PhaseGVN* phase);
   virtual bool pinned() const { return true; }
   uint match_edge(uint idx) const { return 0; }
   virtual uint ideal_reg() const { return Op_RegP; }
@@ -588,7 +595,7 @@
   virtual int Opcode() const;
   virtual bool pinned() const { return true; };
   virtual const Type *bottom_type() const { return TypeTuple::IFBOTH; }
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
   virtual int required_outcnt() const { return 2; }
   virtual void emit(CodeBuffer &cbuf, PhaseRegAlloc *ra_) const { }
--- a/hotspot/src/share/vm/opto/classes.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/classes.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -112,7 +112,6 @@
 macro(ConvL2D)
 macro(ConvL2F)
 macro(ConvL2I)
-macro(CosD)
 macro(CountedLoop)
 macro(CountedLoopEnd)
 macro(CountLeadingZerosI)
@@ -229,7 +228,6 @@
 macro(SafePoint)
 macro(SafePointScalarObject)
 macro(SCMemProj)
-macro(SinD)
 macro(SqrtD)
 macro(Start)
 macro(StartOSR)
--- a/hotspot/src/share/vm/opto/compile.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/compile.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -2296,17 +2296,17 @@
   DEBUG_ONLY( _modified_nodes = NULL; )
  } // (End scope of igvn; run destructor if necessary for asserts.)
 
-  process_print_inlining();
-  // A method with only infinite loops has no edges entering loops from root
-  {
-    TracePhase tp("graphReshape", &timers[_t_graphReshaping]);
-    if (final_graph_reshaping()) {
-      assert(failing(), "must bail out w/ explicit message");
-      return;
-    }
-  }
-
-  print_method(PHASE_OPTIMIZE_FINISHED, 2);
+ process_print_inlining();
+ // A method with only infinite loops has no edges entering loops from root
+ {
+   TracePhase tp("graphReshape", &timers[_t_graphReshaping]);
+   if (final_graph_reshaping()) {
+     assert(failing(), "must bail out w/ explicit message");
+     return;
+   }
+ }
+
+ print_method(PHASE_OPTIMIZE_FINISHED, 2);
 }
 
 
@@ -2874,7 +2874,7 @@
           Node* use = m->fast_out(i);
           if (use->is_Mem() || use->is_EncodeNarrowPtr()) {
             use->ensure_control_or_add_prec(n->in(0));
-          } else if (use->in(0) == NULL) {
+          } else {
             switch(use->Opcode()) {
             case Op_AddP:
             case Op_DecodeN:
--- a/hotspot/src/share/vm/opto/convertnode.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/convertnode.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -32,7 +32,7 @@
 
 //=============================================================================
 //------------------------------Identity---------------------------------------
-Node *Conv2BNode::Identity( PhaseTransform *phase ) {
+Node* Conv2BNode::Identity(PhaseGVN* phase) {
   const Type *t = phase->type( in(1) );
   if( t == Type::TOP ) return in(1);
   if( t == TypeInt::ZERO ) return in(1);
@@ -42,7 +42,7 @@
 }
 
 //------------------------------Value------------------------------------------
-const Type *Conv2BNode::Value( PhaseTransform *phase ) const {
+const Type* Conv2BNode::Value(PhaseGVN* phase) const {
   const Type *t = phase->type( in(1) );
   if( t == Type::TOP ) return Type::TOP;
   if( t == TypeInt::ZERO ) return TypeInt::ZERO;
@@ -64,7 +64,7 @@
 // The conversions operations are all Alpha sorted.  Please keep it that way!
 //=============================================================================
 //------------------------------Value------------------------------------------
-const Type *ConvD2FNode::Value( PhaseTransform *phase ) const {
+const Type* ConvD2FNode::Value(PhaseGVN* phase) const {
   const Type *t = phase->type( in(1) );
   if( t == Type::TOP ) return Type::TOP;
   if( t == Type::DOUBLE ) return Type::FLOAT;
@@ -75,13 +75,13 @@
 //------------------------------Identity---------------------------------------
 // Float's can be converted to doubles with no loss of bits.  Hence
 // converting a float to a double and back to a float is a NOP.
-Node *ConvD2FNode::Identity(PhaseTransform *phase) {
+Node* ConvD2FNode::Identity(PhaseGVN* phase) {
   return (in(1)->Opcode() == Op_ConvF2D) ? in(1)->in(1) : this;
 }
 
 //=============================================================================
 //------------------------------Value------------------------------------------
-const Type *ConvD2INode::Value( PhaseTransform *phase ) const {
+const Type* ConvD2INode::Value(PhaseGVN* phase) const {
   const Type *t = phase->type( in(1) );
   if( t == Type::TOP ) return Type::TOP;
   if( t == Type::DOUBLE ) return TypeInt::INT;
@@ -100,13 +100,13 @@
 //------------------------------Identity---------------------------------------
 // Int's can be converted to doubles with no loss of bits.  Hence
 // converting an integer to a double and back to an integer is a NOP.
-Node *ConvD2INode::Identity(PhaseTransform *phase) {
+Node* ConvD2INode::Identity(PhaseGVN* phase) {
   return (in(1)->Opcode() == Op_ConvI2D) ? in(1)->in(1) : this;
 }
 
 //=============================================================================
 //------------------------------Value------------------------------------------
-const Type *ConvD2LNode::Value( PhaseTransform *phase ) const {
+const Type* ConvD2LNode::Value(PhaseGVN* phase) const {
   const Type *t = phase->type( in(1) );
   if( t == Type::TOP ) return Type::TOP;
   if( t == Type::DOUBLE ) return TypeLong::LONG;
@@ -115,7 +115,7 @@
 }
 
 //------------------------------Identity---------------------------------------
-Node *ConvD2LNode::Identity(PhaseTransform *phase) {
+Node* ConvD2LNode::Identity(PhaseGVN* phase) {
   // Remove ConvD2L->ConvL2D->ConvD2L sequences.
   if( in(1)       ->Opcode() == Op_ConvL2D &&
      in(1)->in(1)->Opcode() == Op_ConvD2L )
@@ -133,7 +133,7 @@
 
 //=============================================================================
 //------------------------------Value------------------------------------------
-const Type *ConvF2DNode::Value( PhaseTransform *phase ) const {
+const Type* ConvF2DNode::Value(PhaseGVN* phase) const {
   const Type *t = phase->type( in(1) );
   if( t == Type::TOP ) return Type::TOP;
   if( t == Type::FLOAT ) return Type::DOUBLE;
@@ -143,7 +143,7 @@
 
 //=============================================================================
 //------------------------------Value------------------------------------------
-const Type *ConvF2INode::Value( PhaseTransform *phase ) const {
+const Type* ConvF2INode::Value(PhaseGVN* phase) const {
   const Type *t = phase->type( in(1) );
   if( t == Type::TOP )       return Type::TOP;
   if( t == Type::FLOAT ) return TypeInt::INT;
@@ -152,7 +152,7 @@
 }
 
 //------------------------------Identity---------------------------------------
-Node *ConvF2INode::Identity(PhaseTransform *phase) {
+Node* ConvF2INode::Identity(PhaseGVN* phase) {
   // Remove ConvF2I->ConvI2F->ConvF2I sequences.
   if( in(1)       ->Opcode() == Op_ConvI2F &&
      in(1)->in(1)->Opcode() == Op_ConvF2I )
@@ -170,7 +170,7 @@
 
 //=============================================================================
 //------------------------------Value------------------------------------------
-const Type *ConvF2LNode::Value( PhaseTransform *phase ) const {
+const Type* ConvF2LNode::Value(PhaseGVN* phase) const {
   const Type *t = phase->type( in(1) );
   if( t == Type::TOP )       return Type::TOP;
   if( t == Type::FLOAT ) return TypeLong::LONG;
@@ -179,7 +179,7 @@
 }
 
 //------------------------------Identity---------------------------------------
-Node *ConvF2LNode::Identity(PhaseTransform *phase) {
+Node* ConvF2LNode::Identity(PhaseGVN* phase) {
   // Remove ConvF2L->ConvL2F->ConvF2L sequences.
   if( in(1)       ->Opcode() == Op_ConvL2F &&
      in(1)->in(1)->Opcode() == Op_ConvF2L )
@@ -197,7 +197,7 @@
 
 //=============================================================================
 //------------------------------Value------------------------------------------
-const Type *ConvI2DNode::Value( PhaseTransform *phase ) const {
+const Type* ConvI2DNode::Value(PhaseGVN* phase) const {
   const Type *t = phase->type( in(1) );
   if( t == Type::TOP ) return Type::TOP;
   const TypeInt *ti = t->is_int();
@@ -207,7 +207,7 @@
 
 //=============================================================================
 //------------------------------Value------------------------------------------
-const Type *ConvI2FNode::Value( PhaseTransform *phase ) const {
+const Type* ConvI2FNode::Value(PhaseGVN* phase) const {
   const Type *t = phase->type( in(1) );
   if( t == Type::TOP ) return Type::TOP;
   const TypeInt *ti = t->is_int();
@@ -216,7 +216,7 @@
 }
 
 //------------------------------Identity---------------------------------------
-Node *ConvI2FNode::Identity(PhaseTransform *phase) {
+Node* ConvI2FNode::Identity(PhaseGVN* phase) {
   // Remove ConvI2F->ConvF2I->ConvI2F sequences.
   if( in(1)       ->Opcode() == Op_ConvF2I &&
      in(1)->in(1)->Opcode() == Op_ConvI2F )
@@ -226,7 +226,7 @@
 
 //=============================================================================
 //------------------------------Value------------------------------------------
-const Type *ConvI2LNode::Value( PhaseTransform *phase ) const {
+const Type* ConvI2LNode::Value(PhaseGVN* phase) const {
   const Type *t = phase->type( in(1) );
   if( t == Type::TOP ) return Type::TOP;
   const TypeInt *ti = t->is_int();
@@ -390,7 +390,7 @@
 
 //=============================================================================
 //------------------------------Value------------------------------------------
-const Type *ConvL2DNode::Value( PhaseTransform *phase ) const {
+const Type* ConvL2DNode::Value(PhaseGVN* phase) const {
   const Type *t = phase->type( in(1) );
   if( t == Type::TOP ) return Type::TOP;
   const TypeLong *tl = t->is_long();
@@ -400,7 +400,7 @@
 
 //=============================================================================
 //------------------------------Value------------------------------------------
-const Type *ConvL2FNode::Value( PhaseTransform *phase ) const {
+const Type* ConvL2FNode::Value(PhaseGVN* phase) const {
   const Type *t = phase->type( in(1) );
   if( t == Type::TOP ) return Type::TOP;
   const TypeLong *tl = t->is_long();
@@ -410,14 +410,14 @@
 
 //=============================================================================
 //----------------------------Identity-----------------------------------------
-Node *ConvL2INode::Identity( PhaseTransform *phase ) {
+Node* ConvL2INode::Identity(PhaseGVN* phase) {
   // Convert L2I(I2L(x)) => x
   if (in(1)->Opcode() == Op_ConvI2L)  return in(1)->in(1);
   return this;
 }
 
 //------------------------------Value------------------------------------------
-const Type *ConvL2INode::Value( PhaseTransform *phase ) const {
+const Type* ConvL2INode::Value(PhaseGVN* phase) const {
   const Type *t = phase->type( in(1) );
   if( t == Type::TOP ) return Type::TOP;
   const TypeLong *tl = t->is_long();
@@ -469,7 +469,7 @@
 //=============================================================================
 //------------------------------Identity---------------------------------------
 // Remove redundant roundings
-Node *RoundFloatNode::Identity( PhaseTransform *phase ) {
+Node* RoundFloatNode::Identity(PhaseGVN* phase) {
   assert(Matcher::strict_fp_requires_explicit_rounding, "should only generate for Intel");
   // Do not round constants
   if (phase->type(in(1))->base() == Type::FloatCon)  return in(1);
@@ -483,14 +483,14 @@
 }
 
 //------------------------------Value------------------------------------------
-const Type *RoundFloatNode::Value( PhaseTransform *phase ) const {
+const Type* RoundFloatNode::Value(PhaseGVN* phase) const {
   return phase->type( in(1) );
 }
 
 //=============================================================================
 //------------------------------Identity---------------------------------------
 // Remove redundant roundings.  Incoming arguments are already rounded.
-Node *RoundDoubleNode::Identity( PhaseTransform *phase ) {
+Node* RoundDoubleNode::Identity(PhaseGVN* phase) {
   assert(Matcher::strict_fp_requires_explicit_rounding, "should only generate for Intel");
   // Do not round constants
   if (phase->type(in(1))->base() == Type::DoubleCon)  return in(1);
@@ -506,7 +506,7 @@
 }
 
 //------------------------------Value------------------------------------------
-const Type *RoundDoubleNode::Value( PhaseTransform *phase ) const {
+const Type* RoundDoubleNode::Value(PhaseGVN* phase) const {
   return phase->type( in(1) );
 }
 
--- a/hotspot/src/share/vm/opto/convertnode.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/convertnode.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -36,8 +36,8 @@
   Conv2BNode( Node *i ) : Node(0,i) {}
   virtual int Opcode() const;
   virtual const Type *bottom_type() const { return TypeInt::BOOL; }
-  virtual Node *Identity( PhaseTransform *phase );
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual Node* Identity(PhaseGVN* phase);
+  virtual const Type* Value(PhaseGVN* phase) const;
   virtual uint  ideal_reg() const { return Op_RegI; }
 };
 
@@ -49,8 +49,8 @@
   ConvD2FNode( Node *in1 ) : Node(0,in1) {}
   virtual int Opcode() const;
   virtual const Type *bottom_type() const { return Type::FLOAT; }
-  virtual const Type *Value( PhaseTransform *phase ) const;
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual const Type* Value(PhaseGVN* phase) const;
+  virtual Node* Identity(PhaseGVN* phase);
   virtual uint  ideal_reg() const { return Op_RegF; }
 };
 
@@ -61,8 +61,8 @@
   ConvD2INode( Node *in1 ) : Node(0,in1) {}
   virtual int Opcode() const;
   virtual const Type *bottom_type() const { return TypeInt::INT; }
-  virtual const Type *Value( PhaseTransform *phase ) const;
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual const Type* Value(PhaseGVN* phase) const;
+  virtual Node* Identity(PhaseGVN* phase);
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
   virtual uint  ideal_reg() const { return Op_RegI; }
 };
@@ -74,8 +74,8 @@
   ConvD2LNode( Node *dbl ) : Node(0,dbl) {}
   virtual int Opcode() const;
   virtual const Type *bottom_type() const { return TypeLong::LONG; }
-  virtual const Type *Value( PhaseTransform *phase ) const;
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual const Type* Value(PhaseGVN* phase) const;
+  virtual Node* Identity(PhaseGVN* phase);
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
   virtual uint ideal_reg() const { return Op_RegL; }
 };
@@ -87,7 +87,7 @@
   ConvF2DNode( Node *in1 ) : Node(0,in1) {}
   virtual int Opcode() const;
   virtual const Type *bottom_type() const { return Type::DOUBLE; }
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   virtual uint  ideal_reg() const { return Op_RegD; }
 };
 
@@ -98,8 +98,8 @@
   ConvF2INode( Node *in1 ) : Node(0,in1) {}
   virtual int Opcode() const;
   virtual const Type *bottom_type() const { return TypeInt::INT; }
-  virtual const Type *Value( PhaseTransform *phase ) const;
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual const Type* Value(PhaseGVN* phase) const;
+  virtual Node* Identity(PhaseGVN* phase);
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
   virtual uint  ideal_reg() const { return Op_RegI; }
 };
@@ -111,8 +111,8 @@
   ConvF2LNode( Node *in1 ) : Node(0,in1) {}
   virtual int Opcode() const;
   virtual const Type *bottom_type() const { return TypeLong::LONG; }
-  virtual const Type *Value( PhaseTransform *phase ) const;
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual const Type* Value(PhaseGVN* phase) const;
+  virtual Node* Identity(PhaseGVN* phase);
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
   virtual uint  ideal_reg() const { return Op_RegL; }
 };
@@ -124,7 +124,7 @@
   ConvI2DNode( Node *in1 ) : Node(0,in1) {}
   virtual int Opcode() const;
   virtual const Type *bottom_type() const { return Type::DOUBLE; }
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   virtual uint  ideal_reg() const { return Op_RegD; }
 };
 
@@ -135,8 +135,8 @@
   ConvI2FNode( Node *in1 ) : Node(0,in1) {}
   virtual int Opcode() const;
   virtual const Type *bottom_type() const { return Type::FLOAT; }
-  virtual const Type *Value( PhaseTransform *phase ) const;
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual const Type* Value(PhaseGVN* phase) const;
+  virtual Node* Identity(PhaseGVN* phase);
   virtual uint  ideal_reg() const { return Op_RegF; }
 };
 
@@ -148,7 +148,7 @@
   : TypeNode(t, 2)
   { init_req(1, in1); }
   virtual int Opcode() const;
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
   virtual uint  ideal_reg() const { return Op_RegL; }
 };
@@ -160,7 +160,7 @@
   ConvL2DNode( Node *in1 ) : Node(0,in1) {}
   virtual int Opcode() const;
   virtual const Type *bottom_type() const { return Type::DOUBLE; }
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   virtual uint ideal_reg() const { return Op_RegD; }
 };
 
@@ -171,7 +171,7 @@
   ConvL2FNode( Node *in1 ) : Node(0,in1) {}
   virtual int Opcode() const;
   virtual const Type *bottom_type() const { return Type::FLOAT; }
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   virtual uint  ideal_reg() const { return Op_RegF; }
 };
 
@@ -182,8 +182,8 @@
   ConvL2INode( Node *in1 ) : Node(0,in1) {}
   virtual int Opcode() const;
   virtual const Type *bottom_type() const { return TypeInt::INT; }
-  virtual Node *Identity( PhaseTransform *phase );
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual Node* Identity(PhaseGVN* phase);
+  virtual const Type* Value(PhaseGVN* phase) const;
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
   virtual uint  ideal_reg() const { return Op_RegI; }
 };
@@ -195,8 +195,8 @@
   virtual int   Opcode() const;
   virtual const Type *bottom_type() const { return Type::FLOAT; }
   virtual uint  ideal_reg() const { return Op_RegF; }
-  virtual Node *Identity( PhaseTransform *phase );
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual Node* Identity(PhaseGVN* phase);
+  virtual const Type* Value(PhaseGVN* phase) const;
 };
 
 
@@ -207,8 +207,8 @@
   virtual int   Opcode() const;
   virtual const Type *bottom_type() const { return Type::DOUBLE; }
   virtual uint  ideal_reg() const { return Op_RegD; }
-  virtual Node *Identity( PhaseTransform *phase );
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual Node* Identity(PhaseGVN* phase);
+  virtual const Type* Value(PhaseGVN* phase) const;
 };
 
 
--- a/hotspot/src/share/vm/opto/countbitsnode.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/countbitsnode.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -29,7 +29,7 @@
 #include "opto/type.hpp"
 
 //------------------------------Value------------------------------------------
-const Type* CountLeadingZerosINode::Value(PhaseTransform* phase) const {
+const Type* CountLeadingZerosINode::Value(PhaseGVN* phase) const {
   const Type* t = phase->type(in(1));
   if (t == Type::TOP) return Type::TOP;
   const TypeInt* ti = t->isa_int();
@@ -51,7 +51,7 @@
 }
 
 //------------------------------Value------------------------------------------
-const Type* CountLeadingZerosLNode::Value(PhaseTransform* phase) const {
+const Type* CountLeadingZerosLNode::Value(PhaseGVN* phase) const {
   const Type* t = phase->type(in(1));
   if (t == Type::TOP) return Type::TOP;
   const TypeLong* tl = t->isa_long();
@@ -74,7 +74,7 @@
 }
 
 //------------------------------Value------------------------------------------
-const Type* CountTrailingZerosINode::Value(PhaseTransform* phase) const {
+const Type* CountTrailingZerosINode::Value(PhaseGVN* phase) const {
   const Type* t = phase->type(in(1));
   if (t == Type::TOP) return Type::TOP;
   const TypeInt* ti = t->isa_int();
@@ -96,7 +96,7 @@
 }
 
 //------------------------------Value------------------------------------------
-const Type* CountTrailingZerosLNode::Value(PhaseTransform* phase) const {
+const Type* CountTrailingZerosLNode::Value(PhaseGVN* phase) const {
   const Type* t = phase->type(in(1));
   if (t == Type::TOP) return Type::TOP;
   const TypeLong* tl = t->isa_long();
--- a/hotspot/src/share/vm/opto/countbitsnode.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/countbitsnode.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -44,7 +44,7 @@
   public:
   CountLeadingZerosINode(Node* in1) : CountBitsNode(in1) {}
   virtual int Opcode() const;
-  virtual const Type* Value(PhaseTransform* phase) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
 };
 
 //---------- CountLeadingZerosLNode --------------------------------------------
@@ -53,7 +53,7 @@
   public:
   CountLeadingZerosLNode(Node* in1) : CountBitsNode(in1) {}
   virtual int Opcode() const;
-  virtual const Type* Value(PhaseTransform* phase) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
 };
 
 //---------- CountTrailingZerosINode -------------------------------------------
@@ -62,7 +62,7 @@
   public:
   CountTrailingZerosINode(Node* in1) : CountBitsNode(in1) {}
   virtual int Opcode() const;
-  virtual const Type* Value(PhaseTransform* phase) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
 };
 
 //---------- CountTrailingZerosLNode -------------------------------------------
@@ -71,7 +71,7 @@
   public:
   CountTrailingZerosLNode(Node* in1) : CountBitsNode(in1) {}
   virtual int Opcode() const;
-  virtual const Type* Value(PhaseTransform* phase) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
 };
 
 //---------- PopCountINode -----------------------------------------------------
--- a/hotspot/src/share/vm/opto/divnode.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/divnode.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -457,7 +457,7 @@
 //=============================================================================
 //------------------------------Identity---------------------------------------
 // If the divisor is 1, we are an identity on the dividend.
-Node *DivINode::Identity( PhaseTransform *phase ) {
+Node* DivINode::Identity(PhaseGVN* phase) {
   return (phase->type( in(2) )->higher_equal(TypeInt::ONE)) ? in(1) : this;
 }
 
@@ -493,7 +493,7 @@
 //------------------------------Value------------------------------------------
 // A DivINode divides its inputs.  The third input is a Control input, used to
 // prevent hoisting the divide above an unsafe test.
-const Type *DivINode::Value( PhaseTransform *phase ) const {
+const Type* DivINode::Value(PhaseGVN* phase) const {
   // Either input is TOP ==> the result is TOP
   const Type *t1 = phase->type( in(1) );
   const Type *t2 = phase->type( in(2) );
@@ -559,7 +559,7 @@
 //=============================================================================
 //------------------------------Identity---------------------------------------
 // If the divisor is 1, we are an identity on the dividend.
-Node *DivLNode::Identity( PhaseTransform *phase ) {
+Node* DivLNode::Identity(PhaseGVN* phase) {
   return (phase->type( in(2) )->higher_equal(TypeLong::ONE)) ? in(1) : this;
 }
 
@@ -595,7 +595,7 @@
 //------------------------------Value------------------------------------------
 // A DivLNode divides its inputs.  The third input is a Control input, used to
 // prevent hoisting the divide above an unsafe test.
-const Type *DivLNode::Value( PhaseTransform *phase ) const {
+const Type* DivLNode::Value(PhaseGVN* phase) const {
   // Either input is TOP ==> the result is TOP
   const Type *t1 = phase->type( in(1) );
   const Type *t2 = phase->type( in(2) );
@@ -662,7 +662,7 @@
 //------------------------------Value------------------------------------------
 // An DivFNode divides its inputs.  The third input is a Control input, used to
 // prevent hoisting the divide above an unsafe test.
-const Type *DivFNode::Value( PhaseTransform *phase ) const {
+const Type* DivFNode::Value(PhaseGVN* phase) const {
   // Either input is TOP ==> the result is TOP
   const Type *t1 = phase->type( in(1) );
   const Type *t2 = phase->type( in(2) );
@@ -705,7 +705,7 @@
 //------------------------------isA_Copy---------------------------------------
 // Dividing by self is 1.
 // If the divisor is 1, we are an identity on the dividend.
-Node *DivFNode::Identity( PhaseTransform *phase ) {
+Node* DivFNode::Identity(PhaseGVN* phase) {
   return (phase->type( in(2) ) == TypeF::ONE) ? in(1) : this;
 }
 
@@ -750,7 +750,7 @@
 //------------------------------Value------------------------------------------
 // An DivDNode divides its inputs.  The third input is a Control input, used to
 // prevent hoisting the divide above an unsafe test.
-const Type *DivDNode::Value( PhaseTransform *phase ) const {
+const Type* DivDNode::Value(PhaseGVN* phase) const {
   // Either input is TOP ==> the result is TOP
   const Type *t1 = phase->type( in(1) );
   const Type *t2 = phase->type( in(2) );
@@ -800,7 +800,7 @@
 //------------------------------isA_Copy---------------------------------------
 // Dividing by self is 1.
 // If the divisor is 1, we are an identity on the dividend.
-Node *DivDNode::Identity( PhaseTransform *phase ) {
+Node* DivDNode::Identity(PhaseGVN* phase) {
   return (phase->type( in(2) ) == TypeD::ONE) ? in(1) : this;
 }
 
@@ -972,7 +972,7 @@
 }
 
 //------------------------------Value------------------------------------------
-const Type *ModINode::Value( PhaseTransform *phase ) const {
+const Type* ModINode::Value(PhaseGVN* phase) const {
   // Either input is TOP ==> the result is TOP
   const Type *t1 = phase->type( in(1) );
   const Type *t2 = phase->type( in(2) );
@@ -1145,7 +1145,7 @@
 }
 
 //------------------------------Value------------------------------------------
-const Type *ModLNode::Value( PhaseTransform *phase ) const {
+const Type* ModLNode::Value(PhaseGVN* phase) const {
   // Either input is TOP ==> the result is TOP
   const Type *t1 = phase->type( in(1) );
   const Type *t2 = phase->type( in(2) );
@@ -1186,7 +1186,7 @@
 
 //=============================================================================
 //------------------------------Value------------------------------------------
-const Type *ModFNode::Value( PhaseTransform *phase ) const {
+const Type* ModFNode::Value(PhaseGVN* phase) const {
   // Either input is TOP ==> the result is TOP
   const Type *t1 = phase->type( in(1) );
   const Type *t2 = phase->type( in(2) );
@@ -1230,7 +1230,7 @@
 
 //=============================================================================
 //------------------------------Value------------------------------------------
-const Type *ModDNode::Value( PhaseTransform *phase ) const {
+const Type* ModDNode::Value(PhaseGVN* phase) const {
   // Either input is TOP ==> the result is TOP
   const Type *t1 = phase->type( in(1) );
   const Type *t2 = phase->type( in(2) );
--- a/hotspot/src/share/vm/opto/divnode.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/divnode.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -44,9 +44,9 @@
 public:
   DivINode( Node *c, Node *dividend, Node *divisor ) : Node(c, dividend, divisor ) {}
   virtual int Opcode() const;
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual Node* Identity(PhaseGVN* phase);
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   virtual const Type *bottom_type() const { return TypeInt::INT; }
   virtual uint ideal_reg() const { return Op_RegI; }
 };
@@ -57,9 +57,9 @@
 public:
   DivLNode( Node *c, Node *dividend, Node *divisor ) : Node(c, dividend, divisor ) {}
   virtual int Opcode() const;
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual Node* Identity(PhaseGVN* phase);
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   virtual const Type *bottom_type() const { return TypeLong::LONG; }
   virtual uint ideal_reg() const { return Op_RegL; }
 };
@@ -70,9 +70,9 @@
 public:
   DivFNode( Node *c, Node *dividend, Node *divisor ) : Node(c, dividend, divisor) {}
   virtual int Opcode() const;
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual Node* Identity(PhaseGVN* phase);
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   virtual const Type *bottom_type() const { return Type::FLOAT; }
   virtual uint ideal_reg() const { return Op_RegF; }
 };
@@ -83,9 +83,9 @@
 public:
   DivDNode( Node *c, Node *dividend, Node *divisor ) : Node(c,dividend, divisor) {}
   virtual int Opcode() const;
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual Node* Identity(PhaseGVN* phase);
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   virtual const Type *bottom_type() const { return Type::DOUBLE; }
   virtual uint ideal_reg() const { return Op_RegD; }
 };
@@ -96,7 +96,7 @@
 public:
   ModINode( Node *c, Node *in1, Node *in2 ) : Node(c,in1, in2) {}
   virtual int Opcode() const;
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
   virtual const Type *bottom_type() const { return TypeInt::INT; }
   virtual uint ideal_reg() const { return Op_RegI; }
@@ -108,7 +108,7 @@
 public:
   ModLNode( Node *c, Node *in1, Node *in2 ) : Node(c,in1, in2) {}
   virtual int Opcode() const;
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
   virtual const Type *bottom_type() const { return TypeLong::LONG; }
   virtual uint ideal_reg() const { return Op_RegL; }
@@ -120,7 +120,7 @@
 public:
   ModFNode( Node *c, Node *in1, Node *in2 ) : Node(c,in1, in2) {}
   virtual int Opcode() const;
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   virtual const Type *bottom_type() const { return Type::FLOAT; }
   virtual uint ideal_reg() const { return Op_RegF; }
 };
@@ -131,7 +131,7 @@
 public:
   ModDNode( Node *c, Node *in1, Node *in2 ) : Node(c, in1, in2) {}
   virtual int Opcode() const;
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   virtual const Type *bottom_type() const { return Type::DOUBLE; }
   virtual uint ideal_reg() const { return Op_RegD; }
 };
@@ -147,9 +147,9 @@
     mod_proj_num =  1       // remainder
   };
   virtual int Opcode() const;
-  virtual Node *Identity( PhaseTransform *phase ) { return this; }
+  virtual Node* Identity(PhaseGVN* phase) { return this; }
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape) { return NULL; }
-  virtual const Type *Value( PhaseTransform *phase ) const { return bottom_type(); }
+  virtual const Type* Value(PhaseGVN* phase)  const { return bottom_type(); }
   virtual uint hash() const { return Node::hash(); }
   virtual bool is_CFG() const  { return false; }
   virtual uint ideal_reg() const { return NotAMachineReg; }
--- a/hotspot/src/share/vm/opto/gcm.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/gcm.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -101,7 +101,32 @@
   }
 }
 
-static bool is_dominator(Block* d, Block* n) {
+bool PhaseCFG::is_dominator(Node* dom_node, Node* node) {
+  if (dom_node == node) {
+    return true;
+  }
+  Block* d = get_block_for_node(dom_node);
+  Block* n = get_block_for_node(node);
+  if (d == n) {
+    if (dom_node->is_block_start()) {
+      return true;
+    }
+    if (node->is_block_start()) {
+      return false;
+    }
+    if (dom_node->is_block_proj()) {
+      return false;
+    }
+    if (node->is_block_proj()) {
+      return true;
+    }
+#ifdef ASSERT
+    node->dump();
+    dom_node->dump();
+#endif
+    fatal("unhandled");
+    return false;
+  }
   return d->dom_lca(n) == d;
 }
 
@@ -145,19 +170,15 @@
           if (n == NULL) {
             n = m;
           } else {
-            Block* bn = get_block_for_node(n);
-            Block* bm = get_block_for_node(m);
-            assert(is_dominator(bn, bm) || is_dominator(bm, bn), "one must dominate the other");
-            n = is_dominator(bn, bm) ? m : n;
+            assert(is_dominator(n, m) || is_dominator(m, n), "one must dominate the other");
+            n = is_dominator(n, m) ? m : n;
           }
         }
       }
       if (n != NULL) {
         assert(node->in(0), "control should have been set");
-        Block* bn = get_block_for_node(n);
-        Block* bnode = get_block_for_node(node->in(0));
-        assert(is_dominator(bn, bnode) || is_dominator(bnode, bn), "one must dominate the other");
-        if (!is_dominator(bn, bnode)) {
+        assert(is_dominator(n, node->in(0)) || is_dominator(node->in(0), n), "one must dominate the other");
+        if (!is_dominator(n, node->in(0))) {
           node->set_req(0, n);
         }
       }
--- a/hotspot/src/share/vm/opto/ifnode.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/ifnode.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -45,7 +45,7 @@
 //=============================================================================
 //------------------------------Value------------------------------------------
 // Return a tuple for whichever arm of the IF is reachable
-const Type *IfNode::Value( PhaseTransform *phase ) const {
+const Type* IfNode::Value(PhaseGVN* phase) const {
   if( !in(0) ) return Type::TOP;
   if( phase->type(in(0)) == Type::TOP )
     return Type::TOP;
@@ -1527,16 +1527,19 @@
 
 //------------------------------Identity---------------------------------------
 // If the test is constant & we match, then we are the input Control
-Node *IfProjNode::Identity(PhaseTransform *phase) {
+Node* IfProjNode::Identity(PhaseGVN* phase) {
   // Can only optimize if cannot go the other way
   const TypeTuple *t = phase->type(in(0))->is_tuple();
-  if (t == TypeTuple::IFNEITHER ||
-      // kill dead branch first otherwise the IfNode's control will
-      // have 2 control uses (the IfNode that doesn't go away because
-      // it still has uses and this branch of the
-      // If). Node::has_special_unique_user() will cause this node to
-      // be reprocessed once the dead branch is killed.
-      (always_taken(t) && in(0)->outcnt() == 1)) {
+  if (t == TypeTuple::IFNEITHER || (always_taken(t) &&
+       // During parsing (GVN) we don't remove dead code aggressively.
+       // Cut off dead branch and let PhaseRemoveUseless take care of it.
+      (!phase->is_IterGVN() ||
+       // During IGVN, first wait for the dead branch to be killed.
+       // Otherwise, the IfNode's control will have two control uses (the IfNode
+       // that doesn't go away because it still has uses and this branch of the
+       // If) which breaks other optimizations. Node::has_special_unique_user()
+       // will cause this node to be reprocessed once the dead branch is killed.
+       in(0)->outcnt() == 1))) {
     // IfNode control
     return in(0)->in(0);
   }
--- a/hotspot/src/share/vm/opto/intrinsicnode.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/intrinsicnode.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -55,7 +55,7 @@
 }
 
 //------------------------------Value------------------------------------------
-const Type* StrIntrinsicNode::Value(PhaseTransform* phase) const {
+const Type* StrIntrinsicNode::Value(PhaseGVN* phase) const {
   if (in(0) && phase->type(in(0)) == Type::TOP) return Type::TOP;
   return bottom_type();
 }
@@ -93,7 +93,7 @@
 }
 
 //------------------------------Value------------------------------------------
-const Type* EncodeISOArrayNode::Value(PhaseTransform* phase) const {
+const Type* EncodeISOArrayNode::Value(PhaseGVN* phase) const {
   if (in(0) && phase->type(in(0)) == Type::TOP) return Type::TOP;
   return bottom_type();
 }
--- a/hotspot/src/share/vm/opto/intrinsicnode.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/intrinsicnode.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -77,7 +77,7 @@
   virtual uint match_edge(uint idx) const;
   virtual uint ideal_reg() const { return Op_RegI; }
   virtual Node* Ideal(PhaseGVN* phase, bool can_reshape);
-  virtual const Type* Value(PhaseTransform* phase) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   ArgEncoding encoding() const { return _encoding; }
 };
 
@@ -177,7 +177,7 @@
   virtual uint match_edge(uint idx) const;
   virtual uint ideal_reg() const { return Op_RegI; }
   virtual Node* Ideal(PhaseGVN* phase, bool can_reshape);
-  virtual const Type* Value(PhaseTransform* phase) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
 };
 
 #endif // SHARE_VM_OPTO_INTRINSICNODE_HPP
--- a/hotspot/src/share/vm/opto/lcm.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/lcm.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -949,6 +949,13 @@
         // and the edge will be lost. This is why this code should be
         // executed only when Precedent (== TypeFunc::Parms) edge is present.
         Node *x = n->in(TypeFunc::Parms);
+        if (x != NULL && get_block_for_node(x) == block && n->find_prec_edge(x) != -1) {
+          // Old edge to node within same block will get removed, but no precedence
+          // edge will get added because it already exists. Update ready count.
+          int cnt = ready_cnt.at(n->_idx);
+          assert(cnt > 1, "MemBar node %d must not get ready here", n->_idx);
+          ready_cnt.at_put(n->_idx, cnt-1);
+        }
         n->del_req(TypeFunc::Parms);
         n->add_prec(x);
       }
--- a/hotspot/src/share/vm/opto/library_call.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/library_call.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -1628,8 +1628,6 @@
   Node* n = NULL;
 
   switch (id) {
-  case vmIntrinsics::_dsin:  n = new SinDNode(C, control(), arg);  break;
-  case vmIntrinsics::_dcos:  n = new CosDNode(C, control(), arg);  break;
   case vmIntrinsics::_dtan:  n = new TanDNode(C, control(), arg);  break;
   default:  fatal_unexpected_iid(id);  break;
   }
@@ -1692,16 +1690,6 @@
     // Slow path - non-blocking leaf call
     Node* call = NULL;
     switch (id) {
-    case vmIntrinsics::_dsin:
-      call = make_runtime_call(RC_LEAF, OptoRuntime::Math_D_D_Type(),
-                               CAST_FROM_FN_PTR(address, SharedRuntime::dsin),
-                               "Sin", NULL, arg, top());
-      break;
-    case vmIntrinsics::_dcos:
-      call = make_runtime_call(RC_LEAF, OptoRuntime::Math_D_D_Type(),
-                               CAST_FROM_FN_PTR(address, SharedRuntime::dcos),
-                               "Cos", NULL, arg, top());
-      break;
     case vmIntrinsics::_dtan:
       call = make_runtime_call(RC_LEAF, OptoRuntime::Math_D_D_Type(),
                                CAST_FROM_FN_PTR(address, SharedRuntime::dtan),
@@ -1752,17 +1740,21 @@
 #define FN_PTR(f) CAST_FROM_FN_PTR(address, f)
   switch (id) {
     // These intrinsics are not properly supported on all hardware
-  case vmIntrinsics::_dcos:   return Matcher::has_match_rule(Op_CosD)   ? inline_trig(id) :
-    runtime_math(OptoRuntime::Math_D_D_Type(), FN_PTR(SharedRuntime::dcos),   "COS");
-  case vmIntrinsics::_dsin:   return Matcher::has_match_rule(Op_SinD)   ? inline_trig(id) :
-    runtime_math(OptoRuntime::Math_D_D_Type(), FN_PTR(SharedRuntime::dsin),   "SIN");
+  case vmIntrinsics::_dsin:
+    return StubRoutines::dsin() != NULL ?
+      runtime_math(OptoRuntime::Math_D_D_Type(), StubRoutines::dsin(), "dsin") :
+      runtime_math(OptoRuntime::Math_D_D_Type(), FN_PTR(SharedRuntime::dsin),   "SIN");
+  case vmIntrinsics::_dcos:
+    return StubRoutines::dcos() != NULL ?
+      runtime_math(OptoRuntime::Math_D_D_Type(), StubRoutines::dcos(), "dcos") :
+      runtime_math(OptoRuntime::Math_D_D_Type(), FN_PTR(SharedRuntime::dcos),   "COS");
   case vmIntrinsics::_dtan:   return Matcher::has_match_rule(Op_TanD)   ? inline_trig(id) :
     runtime_math(OptoRuntime::Math_D_D_Type(), FN_PTR(SharedRuntime::dtan),   "TAN");
 
   case vmIntrinsics::_dlog:
     return StubRoutines::dlog() != NULL ?
-    runtime_math(OptoRuntime::Math_D_D_Type(), StubRoutines::dlog(), "dlog") :
-    runtime_math(OptoRuntime::Math_D_D_Type(), FN_PTR(SharedRuntime::dlog),   "LOG");
+      runtime_math(OptoRuntime::Math_D_D_Type(), StubRoutines::dlog(), "dlog") :
+      runtime_math(OptoRuntime::Math_D_D_Type(), FN_PTR(SharedRuntime::dlog),   "LOG");
   case vmIntrinsics::_dlog10: return Matcher::has_match_rule(Op_Log10D) ? inline_math(id) :
     runtime_math(OptoRuntime::Math_D_D_Type(), FN_PTR(SharedRuntime::dlog10), "LOG10");
 
@@ -3085,7 +3077,7 @@
   set_control( _gvn.transform(new IfTrueNode(iff_arg)));
 #else
   // To return true on Windows you must read the _interrupted field
-  // and check the the event state i.e. take the slow path.
+  // and check the event state i.e. take the slow path.
 #endif // TARGET_OS_FAMILY_windows
 
   // (d) Otherwise, go to the slow path.
@@ -3159,7 +3151,7 @@
 }
 
 //--------------------(inline_native_Class_query helpers)---------------------
-// Use this for JVM_ACC_INTERFACE, JVM_ACC_IS_CLONEABLE, JVM_ACC_HAS_FINALIZER.
+// Use this for JVM_ACC_INTERFACE, JVM_ACC_IS_CLONEABLE_FAST, JVM_ACC_HAS_FINALIZER.
 // Fall through if (mods & mask) == bits, take the guard otherwise.
 Node* LibraryCallKit::generate_access_flags_guard(Node* kls, int modifier_mask, int modifier_bits, RegionNode* region) {
   // Branch around if the given klass has the given modifier bit set.
@@ -4497,14 +4489,14 @@
         generate_virtual_guard(obj_klass, slow_region);
       }
 
-      // The object must be cloneable and must not have a finalizer.
+      // The object must be easily cloneable and must not have a finalizer.
       // Both of these conditions may be checked in a single test.
-      // We could optimize the cloneable test further, but we don't care.
+      // We could optimize the test further, but we don't care.
       generate_access_flags_guard(obj_klass,
                                   // Test both conditions:
-                                  JVM_ACC_IS_CLONEABLE | JVM_ACC_HAS_FINALIZER,
+                                  JVM_ACC_IS_CLONEABLE_FAST | JVM_ACC_HAS_FINALIZER,
                                   // Must be cloneable but not finalizer:
-                                  JVM_ACC_IS_CLONEABLE,
+                                  JVM_ACC_IS_CLONEABLE_FAST,
                                   slow_region);
     }
 
--- a/hotspot/src/share/vm/opto/locknode.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/locknode.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -96,7 +96,7 @@
   virtual uint size_of() const;
   virtual uint cmp( const Node &n ) const ;    // Always fail, except on self
   virtual int Opcode() const;
-  virtual const Type *Value( PhaseTransform *phase ) const { return TypeInt::CC; }
+  virtual const Type* Value(PhaseGVN* phase) const { return TypeInt::CC; }
   const Type *sub(const Type *t1, const Type *t2) const { return TypeInt::CC;}
 
   void create_lock_counter(JVMState* s);
@@ -123,7 +123,7 @@
   virtual uint hash() const ;                  // { return NO_HASH; }
   virtual uint cmp( const Node &n ) const ;    // Always fail, except on self
   virtual int Opcode() const;
-  virtual const Type *Value( PhaseTransform *phase ) const { return TypeInt::CC; }
+  virtual const Type* Value(PhaseGVN* phase) const { return TypeInt::CC; }
   const Type *sub(const Type *t1, const Type *t2) const { return TypeInt::CC;}
 
 };
--- a/hotspot/src/share/vm/opto/loopPredicate.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/loopPredicate.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -519,7 +519,31 @@
     _lpt(lpt), _phase(lpt->_phase),
     _visited(area), _invariant(area), _stack(area, 10 /* guess */),
     _clone_visited(area), _old_new(area)
-  {}
+  {
+    Node* head = _lpt->_head;
+    Node* entry = head->in(LoopNode::EntryControl);
+    if (entry->outcnt() != 1) {
+      // If a node is pinned between the predicates and the loop
+      // entry, we won't be able to move any node in the loop that
+      // depends on it above it in a predicate. Mark all those nodes
+      // as non loop invariatnt.
+      Unique_Node_List wq;
+      wq.push(entry);
+      for (uint next = 0; next < wq.size(); ++next) {
+        Node *n = wq.at(next);
+        for (DUIterator_Fast imax, i = n->fast_outs(imax); i < imax; i++) {
+          Node* u = n->fast_out(i);
+          if (!u->is_CFG()) {
+            Node* c = _phase->get_ctrl(u);
+            if (_lpt->is_member(_phase->get_loop(c)) || _phase->is_dominator(c, head)) {
+              _visited.set(u->_idx);
+              wq.push(u);
+            }
+          }
+        }
+      }
+    }
+  }
 
   // Map old to n for invariance computation and clone
   void map_ctrl(Node* old, Node* n) {
@@ -641,6 +665,7 @@
 
   if (scale != 1) {
     ConNode* con_scale = _igvn.intcon(scale);
+    set_ctrl(con_scale, C->root());
     max_idx_expr = new MulINode(max_idx_expr, con_scale);
     register_new_node(max_idx_expr, ctrl);
     if (TraceLoopPredicate) predString->print("* %d ", scale);
--- a/hotspot/src/share/vm/opto/loopnode.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/loopnode.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -815,6 +815,11 @@
 
   C->print_method(PHASE_AFTER_CLOOPS, 3);
 
+  // Capture bounds of the loop in the induction variable Phi before
+  // subsequent transformation (iteration splitting) obscures the
+  // bounds
+  l->phi()->as_Phi()->set_type(l->phi()->Value(&_igvn));
+
   return true;
 }
 
@@ -897,7 +902,7 @@
 
 //=============================================================================
 //------------------------------Value-----------------------------------------
-const Type *LoopLimitNode::Value( PhaseTransform *phase ) const {
+const Type* LoopLimitNode::Value(PhaseGVN* phase) const {
   const Type* init_t   = phase->type(in(Init));
   const Type* limit_t  = phase->type(in(Limit));
   const Type* stride_t = phase->type(in(Stride));
@@ -1011,7 +1016,7 @@
 
 //------------------------------Identity---------------------------------------
 // If stride == 1 return limit node.
-Node *LoopLimitNode::Identity( PhaseTransform *phase ) {
+Node* LoopLimitNode::Identity(PhaseGVN* phase) {
   int stride_con = phase->type(in(Stride))->is_int()->get_con();
   if (stride_con == 1 || stride_con == -1)
     return in(Limit);
@@ -3483,7 +3488,7 @@
 // Second pass finds latest legal placement, and ideal loop placement.
 void PhaseIdealLoop::build_loop_late_post( Node *n ) {
 
-  if (n->req() == 2 && n->Opcode() == Op_ConvI2L && !C->major_progress() && !_verify_only) {
+  if (n->req() == 2 && (n->Opcode() == Op_ConvI2L || n->Opcode() == Op_CastII) && !C->major_progress() && !_verify_only) {
     _igvn._worklist.push(n);  // Maybe we'll normalize it, if no more loops.
   }
 
--- a/hotspot/src/share/vm/opto/loopnode.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/loopnode.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -339,9 +339,9 @@
   virtual int Opcode() const;
   virtual const Type *bottom_type() const { return TypeInt::INT; }
   virtual uint ideal_reg() const { return Op_RegI; }
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual Node* Identity(PhaseGVN* phase);
 };
 
 // -----------------------------IdealLoopTree----------------------------------
--- a/hotspot/src/share/vm/opto/loopopts.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/loopopts.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -26,6 +26,7 @@
 #include "memory/allocation.inline.hpp"
 #include "opto/addnode.hpp"
 #include "opto/connode.hpp"
+#include "opto/castnode.hpp"
 #include "opto/divnode.hpp"
 #include "opto/loopnode.hpp"
 #include "opto/matcher.hpp"
@@ -900,6 +901,14 @@
   Node *m = remix_address_expressions( n );
   if( m ) return m;
 
+  if (n->is_ConstraintCast()) {
+    Node* dom_cast = n->as_ConstraintCast()->dominating_cast(this);
+    if (dom_cast != NULL) {
+      _igvn.replace_node(n, dom_cast);
+      return dom_cast;
+    }
+  }
+
   // Determine if the Node has inputs from some local Phi.
   // Returns the block to clone thru.
   Node *n_blk = has_local_phi_input( n );
--- a/hotspot/src/share/vm/opto/machnode.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/machnode.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -652,7 +652,7 @@
 uint MachCallNode::cmp( const Node &n ) const
 { return _tf == ((MachCallNode&)n)._tf; }
 const Type *MachCallNode::bottom_type() const { return tf()->range(); }
-const Type *MachCallNode::Value(PhaseTransform *phase) const { return tf()->range(); }
+const Type* MachCallNode::Value(PhaseGVN* phase) const { return tf()->range(); }
 
 #ifndef PRODUCT
 void MachCallNode::dump_spec(outputStream *st) const {
--- a/hotspot/src/share/vm/opto/machnode.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/machnode.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -863,7 +863,7 @@
 
   virtual const Type *bottom_type() const;
   virtual bool  pinned() const { return false; }
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   virtual const RegMask &in_RegMask(uint) const;
   virtual int ret_addr_offset() { return 0; }
 
--- a/hotspot/src/share/vm/opto/macro.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/macro.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -244,7 +244,7 @@
   } else {
     // G1 pre/post barriers
     assert(p2x->outcnt() <= 2, "expects 1 or 2 users: Xor and URShift nodes");
-    // It could be only one user, URShift node, in Object.clone() instrinsic
+    // It could be only one user, URShift node, in Object.clone() intrinsic
     // but the new allocation is passed to arraycopy stub and it could not
     // be scalar replaced. So we don't check the case.
 
@@ -1813,10 +1813,11 @@
     // there can be two Allocates to one Initialize.  The answer in all these
     // edge cases is safety first.  It is always safe to clear immediately
     // within an Allocate, and then (maybe or maybe not) clear some more later.
-    if (!ZeroTLAB)
+    if (!(UseTLAB && ZeroTLAB)) {
       rawmem = ClearArrayNode::clear_memory(control, rawmem, object,
                                             header_size, size_in_bytes,
                                             &_igvn);
+    }
   } else {
     if (!init->is_complete()) {
       // Try to win by zeroing only what the init does not store.
--- a/hotspot/src/share/vm/opto/macroArrayCopy.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/macroArrayCopy.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -295,7 +295,7 @@
   // out-edges of the dest, we need to avoid making derived pointers
   // from it until we have checked its uses.)
   if (ReduceBulkZeroing
-      && !ZeroTLAB              // pointless if already zeroed
+      && !(UseTLAB && ZeroTLAB) // pointless if already zeroed
       && basic_elem_type != T_CONFLICT // avoid corner case
       && !src->eqv_uncast(dest)
       && alloc != NULL
--- a/hotspot/src/share/vm/opto/mathexactnode.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/mathexactnode.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -247,11 +247,11 @@
   return IdealHelper<OverflowLNode>::Ideal(this, phase, can_reshape);
 }
 
-const Type* OverflowINode::Value(PhaseTransform* phase) const {
+const Type* OverflowINode::Value(PhaseGVN* phase) const {
   return IdealHelper<OverflowINode>::Value(this, phase);
 }
 
-const Type* OverflowLNode::Value(PhaseTransform* phase) const {
+const Type* OverflowLNode::Value(PhaseGVN* phase) const {
   return IdealHelper<OverflowLNode>::Value(this, phase);
 }
 
--- a/hotspot/src/share/vm/opto/mathexactnode.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/mathexactnode.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -48,7 +48,7 @@
 
   OverflowINode(Node* in1, Node* in2) : OverflowNode(in1, in2) {}
   virtual Node* Ideal(PhaseGVN* phase, bool can_reshape);
-  virtual const Type* Value(PhaseTransform* phase) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
 
   virtual bool will_overflow(jint v1, jint v2) const = 0;
   virtual bool can_overflow(const Type* t1, const Type* t2) const = 0;
@@ -61,7 +61,7 @@
 
   OverflowLNode(Node* in1, Node* in2) : OverflowNode(in1, in2) {}
   virtual Node* Ideal(PhaseGVN* phase, bool can_reshape);
-  virtual const Type* Value(PhaseTransform* phase) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
 
   virtual bool will_overflow(jlong v1, jlong v2) const = 0;
   virtual bool can_overflow(const Type* t1, const Type* t2) const = 0;
--- a/hotspot/src/share/vm/opto/memnode.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/memnode.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -1069,7 +1069,7 @@
 
 //------------------------------Identity---------------------------------------
 // Loads are identity if previous store is to same address
-Node *LoadNode::Identity( PhaseTransform *phase ) {
+Node* LoadNode::Identity(PhaseGVN* phase) {
   // If the previous store-maker is the right kind of Store, and the store is
   // to the same address, then we are equal to the value stored.
   Node* mem = in(Memory);
@@ -1615,7 +1615,7 @@
 }
 
 //------------------------------Value-----------------------------------------
-const Type *LoadNode::Value( PhaseTransform *phase ) const {
+const Type* LoadNode::Value(PhaseGVN* phase) const {
   // Either input is TOP ==> the result is TOP
   Node* mem = in(MemNode::Memory);
   const Type *t1 = phase->type(mem);
@@ -1901,7 +1901,7 @@
   return LoadNode::Ideal(phase, can_reshape);
 }
 
-const Type* LoadBNode::Value(PhaseTransform *phase) const {
+const Type* LoadBNode::Value(PhaseGVN* phase) const {
   Node* mem = in(MemNode::Memory);
   Node* value = can_see_stored_value(mem,phase);
   if (value != NULL && value->is_Con() &&
@@ -1931,7 +1931,7 @@
   return LoadNode::Ideal(phase, can_reshape);
 }
 
-const Type* LoadUBNode::Value(PhaseTransform *phase) const {
+const Type* LoadUBNode::Value(PhaseGVN* phase) const {
   Node* mem = in(MemNode::Memory);
   Node* value = can_see_stored_value(mem,phase);
   if (value != NULL && value->is_Con() &&
@@ -1961,7 +1961,7 @@
   return LoadNode::Ideal(phase, can_reshape);
 }
 
-const Type* LoadUSNode::Value(PhaseTransform *phase) const {
+const Type* LoadUSNode::Value(PhaseGVN* phase) const {
   Node* mem = in(MemNode::Memory);
   Node* value = can_see_stored_value(mem,phase);
   if (value != NULL && value->is_Con() &&
@@ -1993,7 +1993,7 @@
   return LoadNode::Ideal(phase, can_reshape);
 }
 
-const Type* LoadSNode::Value(PhaseTransform *phase) const {
+const Type* LoadSNode::Value(PhaseGVN* phase) const {
   Node* mem = in(MemNode::Memory);
   Node* value = can_see_stored_value(mem,phase);
   if (value != NULL && value->is_Con() &&
@@ -2026,7 +2026,7 @@
 }
 
 //------------------------------Value------------------------------------------
-const Type *LoadKlassNode::Value( PhaseTransform *phase ) const {
+const Type* LoadKlassNode::Value(PhaseGVN* phase) const {
   return klass_value_common(phase);
 }
 
@@ -2036,7 +2036,7 @@
   return false;
 }
 
-const Type *LoadNode::klass_value_common( PhaseTransform *phase ) const {
+const Type* LoadNode::klass_value_common(PhaseGVN* phase) const {
   // Either input is TOP ==> the result is TOP
   const Type *t1 = phase->type( in(MemNode::Memory) );
   if (t1 == Type::TOP)  return Type::TOP;
@@ -2172,11 +2172,11 @@
 //------------------------------Identity---------------------------------------
 // To clean up reflective code, simplify k.java_mirror.as_klass to plain k.
 // Also feed through the klass in Allocate(...klass...)._klass.
-Node* LoadKlassNode::Identity( PhaseTransform *phase ) {
+Node* LoadKlassNode::Identity(PhaseGVN* phase) {
   return klass_identity_common(phase);
 }
 
-Node* LoadNode::klass_identity_common(PhaseTransform *phase ) {
+Node* LoadNode::klass_identity_common(PhaseGVN* phase) {
   Node* x = LoadNode::Identity(phase);
   if (x != this)  return x;
 
@@ -2231,7 +2231,7 @@
 
 
 //------------------------------Value------------------------------------------
-const Type *LoadNKlassNode::Value( PhaseTransform *phase ) const {
+const Type* LoadNKlassNode::Value(PhaseGVN* phase) const {
   const Type *t = klass_value_common(phase);
   if (t == Type::TOP)
     return t;
@@ -2242,7 +2242,7 @@
 //------------------------------Identity---------------------------------------
 // To clean up reflective code, simplify k.java_mirror.as_klass to narrow k.
 // Also feed through the klass in Allocate(...klass...)._klass.
-Node* LoadNKlassNode::Identity( PhaseTransform *phase ) {
+Node* LoadNKlassNode::Identity(PhaseGVN* phase) {
   Node *x = klass_identity_common(phase);
 
   const Type *t = phase->type( x );
@@ -2254,7 +2254,7 @@
 }
 
 //------------------------------Value-----------------------------------------
-const Type *LoadRangeNode::Value( PhaseTransform *phase ) const {
+const Type* LoadRangeNode::Value(PhaseGVN* phase) const {
   // Either input is TOP ==> the result is TOP
   const Type *t1 = phase->type( in(MemNode::Memory) );
   if( t1 == Type::TOP ) return Type::TOP;
@@ -2302,7 +2302,7 @@
 
 //------------------------------Identity---------------------------------------
 // Feed through the length in AllocateArray(...length...)._length.
-Node* LoadRangeNode::Identity( PhaseTransform *phase ) {
+Node* LoadRangeNode::Identity(PhaseGVN* phase) {
   Node* x = LoadINode::Identity(phase);
   if (x != this)  return x;
 
@@ -2473,7 +2473,7 @@
 }
 
 //------------------------------Value-----------------------------------------
-const Type *StoreNode::Value( PhaseTransform *phase ) const {
+const Type* StoreNode::Value(PhaseGVN* phase) const {
   // Either input is TOP ==> the result is TOP
   const Type *t1 = phase->type( in(MemNode::Memory) );
   if( t1 == Type::TOP ) return Type::TOP;
@@ -2488,7 +2488,7 @@
 // Remove redundant stores:
 //   Store(m, p, Load(m, p)) changes to m.
 //   Store(, p, x) -> Store(m, p, x) changes to Store(m, p, x).
-Node *StoreNode::Identity( PhaseTransform *phase ) {
+Node* StoreNode::Identity(PhaseGVN* phase) {
   Node* mem = in(MemNode::Memory);
   Node* adr = in(MemNode::Address);
   Node* val = in(MemNode::ValueIn);
@@ -2642,7 +2642,7 @@
 
 //=============================================================================
 //------------------------------Identity---------------------------------------
-Node *StoreCMNode::Identity( PhaseTransform *phase ) {
+Node* StoreCMNode::Identity(PhaseGVN* phase) {
   // No need to card mark when storing a null ptr
   Node* my_store = in(MemNode::OopStore);
   if (my_store->is_Store()) {
@@ -2671,7 +2671,7 @@
 }
 
 //------------------------------Value-----------------------------------------
-const Type *StoreCMNode::Value( PhaseTransform *phase ) const {
+const Type* StoreCMNode::Value(PhaseGVN* phase) const {
   // Either input is TOP ==> the result is TOP
   const Type *t = phase->type( in(MemNode::Memory) );
   if( t == Type::TOP ) return Type::TOP;
@@ -2689,7 +2689,7 @@
 
 //=============================================================================
 //----------------------------------SCMemProjNode------------------------------
-const Type * SCMemProjNode::Value( PhaseTransform *phase ) const
+const Type* SCMemProjNode::Value(PhaseGVN* phase) const
 {
   return bottom_type();
 }
@@ -2745,7 +2745,7 @@
 
 //------------------------------Identity---------------------------------------
 // Clearing a zero length array does nothing
-Node *ClearArrayNode::Identity( PhaseTransform *phase ) {
+Node* ClearArrayNode::Identity(PhaseGVN* phase) {
   return phase->type(in(2))->higher_equal(TypeX::ZERO)  ? in(1) : this;
 }
 
@@ -3001,7 +3001,7 @@
 }
 
 //------------------------------Value------------------------------------------
-const Type *MemBarNode::Value( PhaseTransform *phase ) const {
+const Type* MemBarNode::Value(PhaseGVN* phase) const {
   if( !in(0) ) return Type::TOP;
   if( phase->type(in(0)) == Type::TOP )
     return Type::TOP;
@@ -3850,7 +3850,7 @@
   bool do_zeroing = true;       // we might give up if inits are very sparse
   int  big_init_gaps = 0;       // how many large gaps have we seen?
 
-  if (ZeroTLAB)  do_zeroing = false;
+  if (UseTLAB && ZeroTLAB)  do_zeroing = false;
   if (!ReduceFieldZeroing && !ReduceBulkZeroing)  do_zeroing = false;
 
   for (uint i = InitializeNode::RawStores, limit = req(); i < limit; i++) {
@@ -3951,7 +3951,7 @@
   remove_extra_zeroes();        // clear out all the zmems left over
   add_req(inits);
 
-  if (!ZeroTLAB) {
+  if (!(UseTLAB && ZeroTLAB)) {
     // If anything remains to be zeroed, zero it all now.
     zeroes_done = align_size_down(zeroes_done, BytesPerInt);
     // if it is the last unused 4 bytes of an instance, forget about it
@@ -4143,7 +4143,7 @@
 }
 
 //------------------------------Identity---------------------------------------
-Node* MergeMemNode::Identity(PhaseTransform *phase) {
+Node* MergeMemNode::Identity(PhaseGVN* phase) {
   // Identity if this merge point does not record any interesting memory
   // disambiguations.
   Node* base_mem = base_memory();
--- a/hotspot/src/share/vm/opto/memnode.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/memnode.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -207,7 +207,7 @@
 
   // Handle algebraic identities here.  If we have an identity, return the Node
   // we are equivalent to.  We look for Load of a Store.
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual Node* Identity(PhaseGVN* phase);
 
   // If the load is from Field memory and the pointer is non-null, it might be possible to
   // zero out the control input.
@@ -223,11 +223,11 @@
 
   // Compute a new Type for this node.  Basically we just do the pre-check,
   // then call the virtual add() to set the type.
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
 
   // Common methods for LoadKlass and LoadNKlass nodes.
-  const Type *klass_value_common( PhaseTransform *phase ) const;
-  Node *klass_identity_common( PhaseTransform *phase );
+  const Type* klass_value_common(PhaseGVN* phase) const;
+  Node* klass_identity_common(PhaseGVN* phase);
 
   virtual uint ideal_reg() const;
   virtual const Type *bottom_type() const;
@@ -284,7 +284,7 @@
   virtual int Opcode() const;
   virtual uint ideal_reg() const { return Op_RegI; }
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
-  virtual const Type *Value(PhaseTransform *phase) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   virtual int store_Opcode() const { return Op_StoreB; }
   virtual BasicType memory_type() const { return T_BYTE; }
 };
@@ -298,7 +298,7 @@
   virtual int Opcode() const;
   virtual uint ideal_reg() const { return Op_RegI; }
   virtual Node* Ideal(PhaseGVN *phase, bool can_reshape);
-  virtual const Type *Value(PhaseTransform *phase) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   virtual int store_Opcode() const { return Op_StoreB; }
   virtual BasicType memory_type() const { return T_BYTE; }
 };
@@ -312,7 +312,7 @@
   virtual int Opcode() const;
   virtual uint ideal_reg() const { return Op_RegI; }
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
-  virtual const Type *Value(PhaseTransform *phase) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   virtual int store_Opcode() const { return Op_StoreC; }
   virtual BasicType memory_type() const { return T_CHAR; }
 };
@@ -326,7 +326,7 @@
   virtual int Opcode() const;
   virtual uint ideal_reg() const { return Op_RegI; }
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
-  virtual const Type *Value(PhaseTransform *phase) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   virtual int store_Opcode() const { return Op_StoreC; }
   virtual BasicType memory_type() const { return T_SHORT; }
 };
@@ -350,8 +350,8 @@
   LoadRangeNode(Node *c, Node *mem, Node *adr, const TypeInt *ti = TypeInt::POS)
     : LoadINode(c, mem, adr, TypeAryPtr::RANGE, ti, MemNode::unordered) {}
   virtual int Opcode() const;
-  virtual const Type *Value( PhaseTransform *phase ) const;
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual const Type* Value(PhaseGVN* phase) const;
+  virtual Node* Identity(PhaseGVN* phase);
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
 };
 
@@ -483,8 +483,8 @@
   LoadKlassNode(Node *c, Node *mem, Node *adr, const TypePtr *at, const TypeKlassPtr *tk, MemOrd mo)
     : LoadPNode(c, mem, adr, at, tk, mo) {}
   virtual int Opcode() const;
-  virtual const Type *Value( PhaseTransform *phase ) const;
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual const Type* Value(PhaseGVN* phase) const;
+  virtual Node* Identity(PhaseGVN* phase);
   virtual bool depends_only_on_test() const { return true; }
 
   // Polymorphic factory method:
@@ -503,8 +503,8 @@
   virtual int store_Opcode() const { return Op_StoreNKlass; }
   virtual BasicType memory_type() const { return T_NARROWKLASS; }
 
-  virtual const Type *Value( PhaseTransform *phase ) const;
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual const Type* Value(PhaseGVN* phase) const;
+  virtual Node* Identity(PhaseGVN* phase);
   virtual bool depends_only_on_test() const { return true; }
 };
 
@@ -581,10 +581,10 @@
 
   // Compute a new Type for this node.  Basically we just do the pre-check,
   // then call the virtual add() to set the type.
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
 
   // Check for identity function on memory (Load then Store at same address)
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual Node* Identity(PhaseGVN* phase);
 
   // Do not match memory edge
   virtual uint match_edge(uint idx) const;
@@ -746,9 +746,9 @@
            "bad oop alias idx");
   }
   virtual int Opcode() const;
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual Node* Identity(PhaseGVN* phase);
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   virtual BasicType memory_type() const { return T_VOID; } // unspecific
   int oop_alias_idx() const { return _oop_alias_idx; }
 };
@@ -782,7 +782,7 @@
     return ctrl->in(MemNode::Memory)->adr_type();
   }
   virtual uint ideal_reg() const { return 0;} // memory projections don't have a register
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
 #ifndef PRODUCT
   virtual void dump_spec(outputStream *st) const {};
 #endif
@@ -934,7 +934,7 @@
   // ClearArray modifies array elements, and so affects only the
   // array memory addressed by the bottom_type of its base address.
   virtual const class TypePtr *adr_type() const;
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual Node* Identity(PhaseGVN* phase);
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
   virtual uint match_edge(uint idx) const;
 
@@ -983,7 +983,7 @@
   MemBarNode(Compile* C, int alias_idx, Node* precedent);
   virtual int Opcode() const = 0;
   virtual const class TypePtr *adr_type() const { return _adr_type; }
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
   virtual uint match_edge(uint idx) const { return 0; }
   virtual const Type *bottom_type() const { return TypeTuple::MEMBAR; }
@@ -1199,7 +1199,7 @@
   static MergeMemNode* make(Node* base_memory);
 
   virtual int Opcode() const;
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual Node* Identity(PhaseGVN* phase);
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
   virtual uint ideal_reg() const { return NotAMachineReg; }
   virtual uint match_edge(uint idx) const { return 0; }
--- a/hotspot/src/share/vm/opto/movenode.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/movenode.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -121,7 +121,7 @@
 //------------------------------Identity---------------------------------------
 // Conditional-move is an identity if both inputs are the same, or the test
 // true or false.
-Node *CMoveNode::Identity( PhaseTransform *phase ) {
+Node* CMoveNode::Identity(PhaseGVN* phase) {
   if( phase->eqv(in(IfFalse),in(IfTrue)) ) // C-moving identical inputs?
   return in(IfFalse);         // Then it doesn't matter
   if( phase->type(in(Condition)) == TypeInt::ZERO )
@@ -149,7 +149,7 @@
 
 //------------------------------Value------------------------------------------
 // Result is the meet of inputs
-const Type *CMoveNode::Value( PhaseTransform *phase ) const {
+const Type* CMoveNode::Value(PhaseGVN* phase) const {
   if( phase->type(in(Condition)) == Type::TOP )
   return Type::TOP;
   return phase->type(in(IfFalse))->meet_speculative(phase->type(in(IfTrue)));
@@ -351,7 +351,7 @@
 }
 
 //------------------------------Value------------------------------------------
-const Type *MoveL2DNode::Value( PhaseTransform *phase ) const {
+const Type* MoveL2DNode::Value(PhaseGVN* phase) const {
   const Type *t = phase->type( in(1) );
   if( t == Type::TOP ) return Type::TOP;
   const TypeLong *tl = t->is_long();
@@ -362,7 +362,7 @@
 }
 
 //------------------------------Value------------------------------------------
-const Type *MoveI2FNode::Value( PhaseTransform *phase ) const {
+const Type* MoveI2FNode::Value(PhaseGVN* phase) const {
   const Type *t = phase->type( in(1) );
   if( t == Type::TOP ) return Type::TOP;
   const TypeInt *ti = t->is_int();
@@ -373,7 +373,7 @@
 }
 
 //------------------------------Value------------------------------------------
-const Type *MoveF2INode::Value( PhaseTransform *phase ) const {
+const Type* MoveF2INode::Value(PhaseGVN* phase) const {
   const Type *t = phase->type( in(1) );
   if( t == Type::TOP )       return Type::TOP;
   if( t == Type::FLOAT ) return TypeInt::INT;
@@ -384,7 +384,7 @@
 }
 
 //------------------------------Value------------------------------------------
-const Type *MoveD2LNode::Value( PhaseTransform *phase ) const {
+const Type* MoveD2LNode::Value(PhaseGVN* phase) const {
   const Type *t = phase->type( in(1) );
   if( t == Type::TOP ) return Type::TOP;
   if( t == Type::DOUBLE ) return TypeLong::LONG;
--- a/hotspot/src/share/vm/opto/movenode.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/movenode.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -45,8 +45,8 @@
     init_req(IfTrue,right);
   }
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
-  virtual const Type *Value( PhaseTransform *phase ) const;
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual const Type* Value(PhaseGVN* phase) const;
+  virtual Node* Identity(PhaseGVN* phase);
   static CMoveNode *make(Node *c, Node *bol, Node *left, Node *right, const Type *t);
   // Helper function to spot cmove graph shapes
   static Node *is_cmove_id( PhaseTransform *phase, Node *cmp, Node *t, Node *f, BoolNode *b );
@@ -104,7 +104,7 @@
   virtual int Opcode() const;
   virtual const Type *bottom_type() const { return Type::FLOAT; }
   virtual uint ideal_reg() const { return Op_RegF; }
-  virtual const Type* Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
 };
 
 class MoveL2DNode : public Node {
@@ -113,7 +113,7 @@
   virtual int Opcode() const;
   virtual const Type *bottom_type() const { return Type::DOUBLE; }
   virtual uint ideal_reg() const { return Op_RegD; }
-  virtual const Type* Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
 };
 
 class MoveF2INode : public Node {
@@ -122,7 +122,7 @@
   virtual int Opcode() const;
   virtual const Type *bottom_type() const { return TypeInt::INT; }
   virtual uint ideal_reg() const { return Op_RegI; }
-  virtual const Type* Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
 };
 
 class MoveD2LNode : public Node {
@@ -131,7 +131,7 @@
   virtual int Opcode() const;
   virtual const Type *bottom_type() const { return TypeLong::LONG; }
   virtual uint ideal_reg() const { return Op_RegL; }
-  virtual const Type* Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
 };
 
 //------------------------------BinaryNode-------------------------------------
--- a/hotspot/src/share/vm/opto/mulnode.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/mulnode.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -46,7 +46,7 @@
 
 //------------------------------Identity---------------------------------------
 // Multiplying a one preserves the other argument
-Node *MulNode::Identity( PhaseTransform *phase ) {
+Node* MulNode::Identity(PhaseGVN* phase) {
   register const Type *one = mul_id();  // The multiplicative identity
   if( phase->type( in(1) )->higher_equal( one ) ) return in(2);
   if( phase->type( in(2) )->higher_equal( one ) ) return in(1);
@@ -139,7 +139,7 @@
 }
 
 //------------------------------Value-----------------------------------------
-const Type *MulNode::Value( PhaseTransform *phase ) const {
+const Type* MulNode::Value(PhaseGVN* phase) const {
   const Type *t1 = phase->type( in(1) );
   const Type *t2 = phase->type( in(2) );
   // Either input is TOP ==> the result is TOP
@@ -381,7 +381,7 @@
 
 //=============================================================================
 //------------------------------Value------------------------------------------
-const Type *MulHiLNode::Value( PhaseTransform *phase ) const {
+const Type* MulHiLNode::Value(PhaseGVN* phase) const {
   // Either input is TOP ==> the result is TOP
   const Type *t1 = phase->type( in(1) );
   const Type *t2 = phase->type( in(2) );
@@ -432,7 +432,7 @@
 
 //------------------------------Identity---------------------------------------
 // Masking off the high bits of an unsigned load is not required
-Node *AndINode::Identity( PhaseTransform *phase ) {
+Node* AndINode::Identity(PhaseGVN* phase) {
 
   // x & x => x
   if (phase->eqv(in(1), in(2))) return in(1);
@@ -562,7 +562,7 @@
 
 //------------------------------Identity---------------------------------------
 // Masking off the high bits of an unsigned load is not required
-Node *AndLNode::Identity( PhaseTransform *phase ) {
+Node* AndLNode::Identity(PhaseGVN* phase) {
 
   // x & x => x
   if (phase->eqv(in(1), in(2))) return in(1);
@@ -639,7 +639,7 @@
 
 //=============================================================================
 //------------------------------Identity---------------------------------------
-Node *LShiftINode::Identity( PhaseTransform *phase ) {
+Node* LShiftINode::Identity(PhaseGVN* phase) {
   const TypeInt *ti = phase->type( in(2) )->isa_int();  // shift count is an int
   return ( ti && ti->is_con() && ( ti->get_con() & ( BitsPerInt - 1 ) ) == 0 ) ? in(1) : this;
 }
@@ -704,7 +704,7 @@
 
 //------------------------------Value------------------------------------------
 // A LShiftINode shifts its input2 left by input1 amount.
-const Type *LShiftINode::Value( PhaseTransform *phase ) const {
+const Type* LShiftINode::Value(PhaseGVN* phase) const {
   const Type *t1 = phase->type( in(1) );
   const Type *t2 = phase->type( in(2) );
   // Either input is TOP ==> the result is TOP
@@ -751,7 +751,7 @@
 
 //=============================================================================
 //------------------------------Identity---------------------------------------
-Node *LShiftLNode::Identity( PhaseTransform *phase ) {
+Node* LShiftLNode::Identity(PhaseGVN* phase) {
   const TypeInt *ti = phase->type( in(2) )->isa_int(); // shift count is an int
   return ( ti && ti->is_con() && ( ti->get_con() & ( BitsPerLong - 1 ) ) == 0 ) ? in(1) : this;
 }
@@ -813,7 +813,7 @@
 
 //------------------------------Value------------------------------------------
 // A LShiftLNode shifts its input2 left by input1 amount.
-const Type *LShiftLNode::Value( PhaseTransform *phase ) const {
+const Type* LShiftLNode::Value(PhaseGVN* phase) const {
   const Type *t1 = phase->type( in(1) );
   const Type *t2 = phase->type( in(2) );
   // Either input is TOP ==> the result is TOP
@@ -860,7 +860,7 @@
 
 //=============================================================================
 //------------------------------Identity---------------------------------------
-Node *RShiftINode::Identity( PhaseTransform *phase ) {
+Node* RShiftINode::Identity(PhaseGVN* phase) {
   const TypeInt *t2 = phase->type(in(2))->isa_int();
   if( !t2 ) return this;
   if ( t2->is_con() && ( t2->get_con() & ( BitsPerInt - 1 ) ) == 0 )
@@ -959,7 +959,7 @@
 
 //------------------------------Value------------------------------------------
 // A RShiftINode shifts its input2 right by input1 amount.
-const Type *RShiftINode::Value( PhaseTransform *phase ) const {
+const Type* RShiftINode::Value(PhaseGVN* phase) const {
   const Type *t1 = phase->type( in(1) );
   const Type *t2 = phase->type( in(2) );
   // Either input is TOP ==> the result is TOP
@@ -1014,14 +1014,14 @@
 
 //=============================================================================
 //------------------------------Identity---------------------------------------
-Node *RShiftLNode::Identity( PhaseTransform *phase ) {
+Node* RShiftLNode::Identity(PhaseGVN* phase) {
   const TypeInt *ti = phase->type( in(2) )->isa_int(); // shift count is an int
   return ( ti && ti->is_con() && ( ti->get_con() & ( BitsPerLong - 1 ) ) == 0 ) ? in(1) : this;
 }
 
 //------------------------------Value------------------------------------------
 // A RShiftLNode shifts its input2 right by input1 amount.
-const Type *RShiftLNode::Value( PhaseTransform *phase ) const {
+const Type* RShiftLNode::Value(PhaseGVN* phase) const {
   const Type *t1 = phase->type( in(1) );
   const Type *t2 = phase->type( in(2) );
   // Either input is TOP ==> the result is TOP
@@ -1072,7 +1072,7 @@
 
 //=============================================================================
 //------------------------------Identity---------------------------------------
-Node *URShiftINode::Identity( PhaseTransform *phase ) {
+Node* URShiftINode::Identity(PhaseGVN* phase) {
   const TypeInt *ti = phase->type( in(2) )->isa_int();
   if ( ti && ti->is_con() && ( ti->get_con() & ( BitsPerInt - 1 ) ) == 0 ) return in(1);
 
@@ -1168,7 +1168,7 @@
 
 //------------------------------Value------------------------------------------
 // A URShiftINode shifts its input2 right by input1 amount.
-const Type *URShiftINode::Value( PhaseTransform *phase ) const {
+const Type* URShiftINode::Value(PhaseGVN* phase) const {
   // (This is a near clone of RShiftINode::Value.)
   const Type *t1 = phase->type( in(1) );
   const Type *t2 = phase->type( in(2) );
@@ -1242,7 +1242,7 @@
 
 //=============================================================================
 //------------------------------Identity---------------------------------------
-Node *URShiftLNode::Identity( PhaseTransform *phase ) {
+Node* URShiftLNode::Identity(PhaseGVN* phase) {
   const TypeInt *ti = phase->type( in(2) )->isa_int(); // shift count is an int
   return ( ti && ti->is_con() && ( ti->get_con() & ( BitsPerLong - 1 ) ) == 0 ) ? in(1) : this;
 }
@@ -1297,7 +1297,7 @@
 
 //------------------------------Value------------------------------------------
 // A URShiftINode shifts its input2 right by input1 amount.
-const Type *URShiftLNode::Value( PhaseTransform *phase ) const {
+const Type* URShiftLNode::Value(PhaseGVN* phase) const {
   // (This is a near clone of RShiftLNode::Value.)
   const Type *t1 = phase->type( in(1) );
   const Type *t2 = phase->type( in(2) );
--- a/hotspot/src/share/vm/opto/mulnode.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/mulnode.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -47,7 +47,7 @@
 
   // Handle algebraic identities here.  If we have an identity, return the Node
   // we are equivalent to.  We look for "add of zero" as an identity.
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual Node* Identity(PhaseGVN* phase);
 
   // We also canonicalize the Node, moving constants to the right input,
   // and flatten expressions (so that 1+x+2 becomes x+3).
@@ -55,7 +55,7 @@
 
   // Compute a new Type for this node.  Basically we just do the pre-check,
   // then call the virtual add() to set the type.
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
 
   // Supplied function returns the product of the inputs.
   // This also type-checks the inputs for sanity.  Guaranteed never to
@@ -146,7 +146,7 @@
 public:
   MulHiLNode( Node *in1, Node *in2 ) : Node(0,in1,in2) {}
   virtual int Opcode() const;
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   const Type *bottom_type() const { return TypeLong::LONG; }
   virtual uint ideal_reg() const { return Op_RegL; }
 };
@@ -159,7 +159,7 @@
   AndINode( Node *in1, Node *in2 ) : MulINode(in1,in2) {}
   virtual int Opcode() const;
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual Node* Identity(PhaseGVN* phase);
   virtual const Type *mul_ring( const Type *, const Type * ) const;
   const Type *mul_id() const { return TypeInt::MINUS_1; }
   const Type *add_id() const { return TypeInt::ZERO; }
@@ -176,7 +176,7 @@
   AndLNode( Node *in1, Node *in2 ) : MulLNode(in1,in2) {}
   virtual int Opcode() const;
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual Node* Identity(PhaseGVN* phase);
   virtual const Type *mul_ring( const Type *, const Type * ) const;
   const Type *mul_id() const { return TypeLong::MINUS_1; }
   const Type *add_id() const { return TypeLong::ZERO; }
@@ -191,9 +191,9 @@
 public:
   LShiftINode( Node *in1, Node *in2 ) : Node(0,in1,in2) {}
   virtual int Opcode() const;
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual Node* Identity(PhaseGVN* phase);
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   const Type *bottom_type() const { return TypeInt::INT; }
   virtual uint ideal_reg() const { return Op_RegI; }
 };
@@ -204,9 +204,9 @@
 public:
   LShiftLNode( Node *in1, Node *in2 ) : Node(0,in1,in2) {}
   virtual int Opcode() const;
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual Node* Identity(PhaseGVN* phase);
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   const Type *bottom_type() const { return TypeLong::LONG; }
   virtual uint ideal_reg() const { return Op_RegL; }
 };
@@ -217,9 +217,9 @@
 public:
   RShiftINode( Node *in1, Node *in2 ) : Node(0,in1,in2) {}
   virtual int Opcode() const;
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual Node* Identity(PhaseGVN* phase);
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   const Type *bottom_type() const { return TypeInt::INT; }
   virtual uint ideal_reg() const { return Op_RegI; }
 };
@@ -230,8 +230,8 @@
 public:
   RShiftLNode( Node *in1, Node *in2 ) : Node(0,in1,in2) {}
   virtual int Opcode() const;
-  virtual Node *Identity( PhaseTransform *phase );
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual Node* Identity(PhaseGVN* phase);
+  virtual const Type* Value(PhaseGVN* phase) const;
   const Type *bottom_type() const { return TypeLong::LONG; }
   virtual uint ideal_reg() const { return Op_RegL; }
 };
@@ -243,9 +243,9 @@
 public:
   URShiftINode( Node *in1, Node *in2 ) : Node(0,in1,in2) {}
   virtual int Opcode() const;
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual Node* Identity(PhaseGVN* phase);
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   const Type *bottom_type() const { return TypeInt::INT; }
   virtual uint ideal_reg() const { return Op_RegI; }
 };
@@ -256,9 +256,9 @@
 public:
   URShiftLNode( Node *in1, Node *in2 ) : Node(0,in1,in2) {}
   virtual int Opcode() const;
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual Node* Identity(PhaseGVN* phase);
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   const Type *bottom_type() const { return TypeLong::LONG; }
   virtual uint ideal_reg() const { return Op_RegL; }
 };
--- a/hotspot/src/share/vm/opto/multnode.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/multnode.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -147,7 +147,7 @@
 }
 
 //------------------------------Value------------------------------------------
-const Type *ProjNode::Value( PhaseTransform *phase ) const {
+const Type* ProjNode::Value(PhaseGVN* phase) const {
   if (in(0) == NULL) return Type::TOP;
   return proj_type(phase->type(in(0)));
 }
--- a/hotspot/src/share/vm/opto/multnode.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/multnode.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -81,7 +81,7 @@
   virtual const Type *bottom_type() const;
   virtual const TypePtr *adr_type() const;
   virtual bool pinned() const;
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   virtual uint ideal_reg() const;
   virtual const RegMask &out_RegMask() const;
 
--- a/hotspot/src/share/vm/opto/narrowptrnode.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/narrowptrnode.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -26,7 +26,7 @@
 #include "opto/narrowptrnode.hpp"
 #include "opto/phaseX.hpp"
 
-Node* DecodeNNode::Identity(PhaseTransform* phase) {
+Node* DecodeNNode::Identity(PhaseGVN* phase) {
   const Type *t = phase->type( in(1) );
   if( t == Type::TOP ) return in(1);
 
@@ -37,7 +37,7 @@
   return this;
 }
 
-const Type *DecodeNNode::Value( PhaseTransform *phase ) const {
+const Type* DecodeNNode::Value(PhaseGVN* phase) const {
   const Type *t = phase->type( in(1) );
   if (t == Type::TOP) return Type::TOP;
   if (t == TypeNarrowOop::NULL_PTR) return TypePtr::NULL_PTR;
@@ -46,7 +46,7 @@
   return t->make_ptr();
 }
 
-Node* EncodePNode::Identity(PhaseTransform* phase) {
+Node* EncodePNode::Identity(PhaseGVN* phase) {
   const Type *t = phase->type( in(1) );
   if( t == Type::TOP ) return in(1);
 
@@ -57,7 +57,7 @@
   return this;
 }
 
-const Type *EncodePNode::Value( PhaseTransform *phase ) const {
+const Type* EncodePNode::Value(PhaseGVN* phase) const {
   const Type *t = phase->type( in(1) );
   if (t == Type::TOP) return Type::TOP;
   if (t == TypePtr::NULL_PTR) return TypeNarrowOop::NULL_PTR;
@@ -67,7 +67,7 @@
 }
 
 
-Node* DecodeNKlassNode::Identity(PhaseTransform* phase) {
+Node* DecodeNKlassNode::Identity(PhaseGVN* phase) {
   const Type *t = phase->type( in(1) );
   if( t == Type::TOP ) return in(1);
 
@@ -78,7 +78,7 @@
   return this;
 }
 
-const Type *DecodeNKlassNode::Value( PhaseTransform *phase ) const {
+const Type* DecodeNKlassNode::Value(PhaseGVN* phase) const {
   const Type *t = phase->type( in(1) );
   if (t == Type::TOP) return Type::TOP;
   assert(t != TypeNarrowKlass::NULL_PTR, "null klass?");
@@ -87,7 +87,7 @@
   return t->make_ptr();
 }
 
-Node* EncodePKlassNode::Identity(PhaseTransform* phase) {
+Node* EncodePKlassNode::Identity(PhaseGVN* phase) {
   const Type *t = phase->type( in(1) );
   if( t == Type::TOP ) return in(1);
 
@@ -98,7 +98,7 @@
   return this;
 }
 
-const Type *EncodePKlassNode::Value( PhaseTransform *phase ) const {
+const Type* EncodePKlassNode::Value(PhaseGVN* phase) const {
   const Type *t = phase->type( in(1) );
   if (t == Type::TOP) return Type::TOP;
   assert (t != TypePtr::NULL_PTR, "null klass?");
--- a/hotspot/src/share/vm/opto/narrowptrnode.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/narrowptrnode.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -52,8 +52,8 @@
     init_class_id(Class_EncodeP);
   }
   virtual int Opcode() const;
-  virtual Node *Identity( PhaseTransform *phase );
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual Node* Identity(PhaseGVN* phase);
+  virtual const Type* Value(PhaseGVN* phase) const;
 };
 
 //------------------------------EncodePKlass--------------------------------
@@ -67,8 +67,8 @@
     init_class_id(Class_EncodePKlass);
   }
   virtual int Opcode() const;
-  virtual Node *Identity( PhaseTransform *phase );
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual Node* Identity(PhaseGVN* phase);
+  virtual const Type* Value(PhaseGVN* phase) const;
 };
 
 //------------------------------DecodeNarrowPtr--------------------------------
@@ -95,8 +95,8 @@
     init_class_id(Class_DecodeN);
   }
   virtual int Opcode() const;
-  virtual const Type *Value( PhaseTransform *phase ) const;
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual const Type* Value(PhaseGVN* phase) const;
+  virtual Node* Identity(PhaseGVN* phase);
 };
 
 //------------------------------DecodeNKlass--------------------------------
@@ -110,8 +110,8 @@
     init_class_id(Class_DecodeNKlass);
   }
   virtual int Opcode() const;
-  virtual const Type *Value( PhaseTransform *phase ) const;
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual const Type* Value(PhaseGVN* phase) const;
+  virtual Node* Identity(PhaseGVN* phase);
 };
 
 #endif // SHARE_VM_OPTO_NARROWPTRNODE_HPP
--- a/hotspot/src/share/vm/opto/node.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/node.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -796,8 +796,9 @@
   // First remove corresponding def-use edge
   Node *n = in(idx);
   if (n != NULL) n->del_out((Node *)this);
-  _in[idx] = in(--_cnt);  // Compact the array
-  _in[_cnt] = NULL;       // NULL out emptied slot
+  _in[idx] = in(--_cnt); // Compact the array
+  // Avoid spec violation: Gap in prec edges.
+  close_prec_gap_at(_cnt);
   Compile::current()->record_modified_node(this);
 }
 
@@ -810,10 +811,11 @@
   // First remove corresponding def-use edge
   Node *n = in(idx);
   if (n != NULL) n->del_out((Node *)this);
-  if (idx < _cnt - 1) { // Not last edge ?
-    Copy::conjoint_words_to_lower((HeapWord*)&_in[idx+1], (HeapWord*)&_in[idx], ((_cnt-idx-1)*sizeof(Node*)));
+  if (idx < --_cnt) {    // Not last edge ?
+    Copy::conjoint_words_to_lower((HeapWord*)&_in[idx+1], (HeapWord*)&_in[idx], ((_cnt-idx)*sizeof(Node*)));
   }
-  _in[--_cnt] = NULL;   // NULL out emptied slot
+  // Avoid spec violation: Gap in prec edges.
+  close_prec_gap_at(_cnt);
   Compile::current()->record_modified_node(this);
 }
 
@@ -845,10 +847,12 @@
   uint nrep = 0;
   for (uint i = 0; i < len(); i++) {
     if (in(i) == old) {
-      if (i < req())
+      if (i < req()) {
         set_req(i, neww);
-      else
+      } else {
+        assert(find_prec_edge(neww) == -1, "spec violation: duplicated prec edge (node %d -> %d)", _idx, neww->_idx);
         set_prec(i, neww);
+      }
       nrep++;
     }
   }
@@ -907,7 +911,7 @@
 Node* Node::uncast() const {
   // Should be inline:
   //return is_ConstraintCast() ? uncast_helper(this) : (Node*) this;
-  if (is_ConstraintCast() || is_CheckCastPP())
+  if (is_ConstraintCast())
     return uncast_helper(this);
   else
     return (Node*) this;
@@ -961,8 +965,6 @@
       break;
     } else if (p->is_ConstraintCast()) {
       p = p->in(1);
-    } else if (p->is_CheckCastPP()) {
-      p = p->in(1);
     } else {
       break;
     }
@@ -982,24 +984,27 @@
 
   // Find a precedence edge to move
   uint i = _cnt;
-  while( in(i) != NULL ) i++;
+  while( in(i) != NULL ) {
+    if (in(i) == n) return; // Avoid spec violation: duplicated prec edge.
+    i++;
+  }
   _in[i] = n;                                // Stuff prec edge over NULL
   if ( n != NULL) n->add_out((Node *)this);  // Add mirror edge
+
+#ifdef ASSERT
+  while ((++i)<_max) { assert(_in[i] == NULL, "spec violation: Gap in prec edges (node %d)", _idx); }
+#endif
 }
 
 //------------------------------rm_prec----------------------------------------
 // Remove a precedence input.  Precedence inputs are unordered, with
 // duplicates removed and NULLs packed down at the end.
 void Node::rm_prec( uint j ) {
-
-  // Find end of precedence list to pack NULLs
-  uint i;
-  for( i=j; i<_max; i++ )
-    if( !_in[i] )               // Find the NULL at end of prec edge list
-      break;
-  if (_in[j] != NULL) _in[j]->del_out((Node *)this);
-  _in[j] = _in[--i];            // Move last element over removed guy
-  _in[i] = NULL;                // NULL out last element
+  assert(j < _max, "oob: i=%d, _max=%d", j, _max);
+  assert(j >= _cnt, "not a precedence edge");
+  if (_in[j] == NULL) return;   // Avoid spec violation: Gap in prec edges.
+  _in[j]->del_out((Node *)this);
+  close_prec_gap_at(j);
 }
 
 //------------------------------size_of----------------------------------------
@@ -1066,13 +1071,13 @@
 
 //------------------------------Identity---------------------------------------
 // Return a node that the given node is equivalent to.
-Node *Node::Identity( PhaseTransform * ) {
+Node* Node::Identity(PhaseGVN* phase) {
   return this;                  // Default to no identities
 }
 
 //------------------------------Value------------------------------------------
 // Compute a new Type for a node using the Type of the inputs.
-const Type *Node::Value( PhaseTransform * ) const {
+const Type* Node::Value(PhaseGVN* phase) const {
   return bottom_type();         // Default to worst-case Type
 }
 
@@ -2451,7 +2456,7 @@
 uint TypeNode::cmp( const Node &n ) const
 { return !Type::cmp( _type, ((TypeNode&)n)._type ); }
 const Type *TypeNode::bottom_type() const { return _type; }
-const Type *TypeNode::Value( PhaseTransform * ) const { return _type; }
+const Type* TypeNode::Value(PhaseGVN* phase) const { return _type; }
 
 //------------------------------ideal_reg--------------------------------------
 uint TypeNode::ideal_reg() const {
--- a/hotspot/src/share/vm/opto/node.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/node.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -423,6 +423,16 @@
   }
   // Find first occurrence of n among my edges:
   int find_edge(Node* n);
+  int find_prec_edge(Node* n) {
+    for (uint i = req(); i < len(); i++) {
+      if (_in[i] == n) return i;
+      if (_in[i] == NULL) {
+        DEBUG_ONLY( while ((++i) < len()) assert(_in[i] == NULL, "Gap in prec edges!"); )
+        break;
+      }
+    }
+    return -1;
+  }
   int replace_edge(Node* old, Node* neww);
   int replace_edges_in_range(Node* old, Node* neww, int start, int end);
   // NULL out all inputs to eliminate incoming Def-Use edges.
@@ -476,6 +486,19 @@
     debug_only(_last_del = n; ++_del_tick);
     #endif
   }
+  // Close gap after removing edge.
+  void close_prec_gap_at(uint gap) {
+    assert(_cnt <= gap && gap < _max, "no valid prec edge");
+    uint i = gap;
+    Node *last = NULL;
+    for (; i < _max-1; ++i) {
+      Node *next = _in[i+1];
+      if (next == NULL) break;
+      last = next;
+    }
+    _in[gap] = last; // Move last slot to empty one.
+    _in[i] = NULL;   // NULL out last slot.
+  }
 
 public:
   // Globally replace this node by a given new node, updating all uses.
@@ -492,13 +515,23 @@
   // Add or remove precedence edges
   void add_prec( Node *n );
   void rm_prec( uint i );
+
+  // Note: prec(i) will not necessarily point to n if edge already exists.
   void set_prec( uint i, Node *n ) {
-    assert( is_not_dead(n), "can not use dead node");
-    assert( i >= _cnt, "not a precedence edge");
+    assert(i < _max, "oob: i=%d, _max=%d", i, _max);
+    assert(is_not_dead(n), "can not use dead node");
+    assert(i >= _cnt, "not a precedence edge");
+    // Avoid spec violation: duplicated prec edge.
+    if (_in[i] == n) return;
+    if (n == NULL || find_prec_edge(n) != -1) {
+      rm_prec(i);
+      return;
+    }
     if (_in[i] != NULL) _in[i]->del_out((Node *)this);
     _in[i] = n;
     if (n != NULL) n->add_out((Node *)this);
   }
+
   // Set this node's index, used by cisc_version to replace current node
   void set_idx(uint new_idx) {
     const node_idx_t* ref = &_idx;
@@ -893,10 +926,10 @@
   // Return an existing node which computes the same function as this node.
   // The optimistic combined algorithm requires this to return a Node which
   // is a small number of steps away (e.g., one of my inputs).
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual Node* Identity(PhaseGVN* phase);
 
   // Return the set of values this Node can take on at runtime.
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
 
   // Return a node which is more "ideal" than the current node.
   // The invariants on this call are subtle.  If in doubt, read the
@@ -1663,7 +1696,7 @@
   TypeNode( const Type *t, uint required ) : Node(required), _type(t) {
     init_class_id(Class_Type);
   }
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   virtual const Type *bottom_type() const;
   virtual       uint  ideal_reg() const;
 #ifndef PRODUCT
--- a/hotspot/src/share/vm/opto/opaquenode.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/opaquenode.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -40,7 +40,7 @@
 // call to IterGVN and any chance of hitting this code.  Hence there's no
 // phase-ordering problem with stripping Opaque1 in IGVN followed by some
 // more loop optimizations that require it.
-Node *Opaque1Node::Identity( PhaseTransform *phase ) {
+Node* Opaque1Node::Identity(PhaseGVN* phase) {
   return phase->C->major_progress() ? this : in(1);
 }
 
@@ -76,7 +76,7 @@
   }
 }
 
-Node *ProfileBooleanNode::Identity( PhaseTransform *phase ) {
+Node* ProfileBooleanNode::Identity(PhaseGVN* phase) {
   if (_delay_removal) {
     return this;
   } else {
--- a/hotspot/src/share/vm/opto/opaquenode.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/opaquenode.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -50,7 +50,7 @@
   Node* original_loop_limit() { return req()==3 ? in(2) : NULL; }
   virtual int Opcode() const;
   virtual const Type *bottom_type() const { return TypeInt::INT; }
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual Node* Identity(PhaseGVN* phase);
 };
 
 //------------------------------Opaque2Node------------------------------------
@@ -109,7 +109,7 @@
 
   virtual int Opcode() const;
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
-  virtual Node *Identity(PhaseTransform *phase);
+  virtual Node* Identity(PhaseGVN* phase);
   virtual const Type *bottom_type() const { return TypeInt::BOOL; }
 };
 
--- a/hotspot/src/share/vm/opto/phaseX.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/phaseX.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -835,6 +835,22 @@
   return k;
 }
 
+bool PhaseGVN::is_dominator_helper(Node *d, Node *n, bool linear_only) {
+  if (d->is_top() || n->is_top()) {
+    return false;
+  }
+  assert(d->is_CFG() && n->is_CFG(), "must have CFG nodes");
+  int i = 0;
+  while (d != n) {
+    n = IfNode::up_one_dom(n, linear_only);
+    i++;
+    if (n == NULL || i >= 10) {
+      return false;
+    }
+  }
+  return true;
+}
+
 #ifdef ASSERT
 //------------------------------dead_loop_check--------------------------------
 // Check for a simple dead loop when a data node references itself directly
@@ -1525,7 +1541,7 @@
     }
 
     // If changed Cast input, check Phi users for simple cycles
-    if( use->is_ConstraintCast() || use->is_CheckCastPP() ) {
+    if (use->is_ConstraintCast()) {
       for (DUIterator_Fast i2max, i2 = use->fast_outs(i2max); i2 < i2max; i2++) {
         Node* u = use->fast_out(i2);
         if (u->is_Phi())
--- a/hotspot/src/share/vm/opto/phaseX.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/phaseX.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -330,6 +330,9 @@
   // Delayed node rehash if this is an IGVN phase
   virtual void igvn_rehash_node_delayed(Node* n) {}
 
+  // true if CFG node d dominates CFG node n
+  virtual bool is_dominator(Node *d, Node *n) { fatal("unimplemented for this pass"); return false; };
+
 #ifndef PRODUCT
   void dump_old2new_map() const;
   void dump_new( uint new_lidx ) const;
@@ -397,6 +400,9 @@
 //------------------------------PhaseGVN---------------------------------------
 // Phase for performing local, pessimistic GVN-style optimizations.
 class PhaseGVN : public PhaseValues {
+protected:
+  bool is_dominator_helper(Node *d, Node *n, bool linear_only);
+
 public:
   PhaseGVN( Arena *arena, uint est_max_size ) : PhaseValues( arena, est_max_size ) {}
   PhaseGVN( PhaseGVN *gvn ) : PhaseValues( gvn ) {}
@@ -415,6 +421,8 @@
     _types = gvn->_types;
   }
 
+  bool is_dominator(Node *d, Node *n) { return is_dominator_helper(d, n, true); }
+
   // Check for a simple dead loop when a data node references itself.
   DEBUG_ONLY(void dead_loop_check(Node *n);)
 };
@@ -545,6 +553,8 @@
     _table.check_no_speculative_types();
   }
 
+  bool is_dominator(Node *d, Node *n) { return is_dominator_helper(d, n, false); }
+
 #ifndef PRODUCT
 protected:
   // Sub-quadratic implementation of VerifyIterativeGVN.
--- a/hotspot/src/share/vm/opto/rootnode.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/rootnode.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -79,7 +79,7 @@
 }
 
 //------------------------------Value------------------------------------------
-const Type *HaltNode::Value( PhaseTransform *phase ) const {
+const Type* HaltNode::Value(PhaseGVN* phase) const {
   return ( phase->type(in(TypeFunc::Control)) == Type::TOP)
     ? Type::TOP
     : Type::BOTTOM;
--- a/hotspot/src/share/vm/opto/rootnode.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/rootnode.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -42,9 +42,9 @@
   virtual int   Opcode() const;
   virtual const Node *is_block_proj() const { return this; }
   virtual const Type *bottom_type() const { return Type::BOTTOM; }
-  virtual Node *Identity( PhaseTransform *phase ) { return this; }
+  virtual Node* Identity(PhaseGVN* phase) { return this; }
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
-  virtual const Type *Value( PhaseTransform *phase ) const { return Type::BOTTOM; }
+  virtual const Type* Value(PhaseGVN* phase) const { return Type::BOTTOM; }
 };
 
 //------------------------------HaltNode---------------------------------------
@@ -55,7 +55,7 @@
   virtual int Opcode() const;
   virtual bool  pinned() const { return true; };
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   virtual const Type *bottom_type() const;
   virtual bool  is_CFG() const { return true; }
   virtual uint hash() const { return NO_HASH; }  // CFG nodes do not hash
--- a/hotspot/src/share/vm/opto/stringopts.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/stringopts.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -822,11 +822,10 @@
             }
           } else if (ctrl->is_IfTrue()) { // null checks, class checks
             iff = ctrl->in(0)->as_If();
-            assert(iff->is_If(), "must be if");
             // Verify that the other arm is an uncommon trap
             Node* otherproj = iff->proj_out(1 - ctrl->as_Proj()->_con);
             CallStaticJavaNode* call = otherproj->unique_out()->isa_CallStaticJava();
-            assert(strcmp(call->_name, "uncommon_trap") == 0, "must be uncommond trap");
+            assert(strcmp(call->_name, "uncommon_trap") == 0, "must be uncommon trap");
             ctrl = iff->in(0);
           } else {
             break;
@@ -914,6 +913,13 @@
       BoolNode* b = iff->in(1)->isa_Bool();
 
       if (b == NULL) {
+#ifndef PRODUCT
+        if (PrintOptimizeStringConcat) {
+          tty->print_cr("unexpected input to IfNode");
+          iff->in(1)->dump();
+          tty->cr();
+        }
+#endif
         fail = true;
         break;
       }
--- a/hotspot/src/share/vm/opto/subnode.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/subnode.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -46,7 +46,7 @@
 //=============================================================================
 //------------------------------Identity---------------------------------------
 // If right input is a constant 0, return the left input.
-Node *SubNode::Identity( PhaseTransform *phase ) {
+Node* SubNode::Identity(PhaseGVN* phase) {
   assert(in(1) != this, "Must already have called Value");
   assert(in(2) != this, "Must already have called Value");
 
@@ -100,7 +100,7 @@
   return NULL;
 }
 
-const Type* SubNode::Value(PhaseTransform *phase) const {
+const Type* SubNode::Value(PhaseGVN* phase) const {
   const Type* t = Value_common(phase);
   if (t != NULL) {
     return t;
@@ -378,7 +378,7 @@
 //=============================================================================
 //------------------------------Value------------------------------------------
 // A subtract node differences its two inputs.
-const Type *SubFPNode::Value( PhaseTransform *phase ) const {
+const Type* SubFPNode::Value(PhaseGVN* phase) const {
   const Node* in1 = in(1);
   const Node* in2 = in(2);
   // Either input is TOP ==> the result is TOP
@@ -494,7 +494,7 @@
 // Unlike SubNodes, compare must still flatten return value to the
 // range -1, 0, 1.
 // And optimizations like those for (X + Y) - X fail if overflow happens.
-Node *CmpNode::Identity( PhaseTransform *phase ) {
+Node* CmpNode::Identity(PhaseGVN* phase) {
   return this;
 }
 
@@ -611,7 +611,7 @@
   return TypeInt::CC;                   // else use worst case results
 }
 
-const Type* CmpUNode::Value(PhaseTransform *phase) const {
+const Type* CmpUNode::Value(PhaseGVN* phase) const {
   const Type* t = SubNode::Value_common(phase);
   if (t != NULL) {
     return t;
@@ -1053,7 +1053,7 @@
 //------------------------------Value------------------------------------------
 // Simplify an CmpF (compare 2 floats ) node, based on local information.
 // If both inputs are constants, compare them.
-const Type *CmpFNode::Value( PhaseTransform *phase ) const {
+const Type* CmpFNode::Value(PhaseGVN* phase) const {
   const Node* in1 = in(1);
   const Node* in2 = in(2);
   // Either input is TOP ==> the result is TOP
@@ -1083,7 +1083,7 @@
 //------------------------------Value------------------------------------------
 // Simplify an CmpD (compare 2 doubles ) node, based on local information.
 // If both inputs are constants, compare them.
-const Type *CmpDNode::Value( PhaseTransform *phase ) const {
+const Type* CmpDNode::Value(PhaseGVN* phase) const {
   const Node* in1 = in(1);
   const Node* in2 = in(2);
   // Either input is TOP ==> the result is TOP
@@ -1423,7 +1423,7 @@
 //------------------------------Value------------------------------------------
 // Simplify a Bool (convert condition codes to boolean (1 or 0)) node,
 // based on local information.   If the input is constant, do it.
-const Type *BoolNode::Value( PhaseTransform *phase ) const {
+const Type* BoolNode::Value(PhaseGVN* phase) const {
   return _test.cc2logical( phase->type( in(1) ) );
 }
 
@@ -1466,7 +1466,7 @@
 //=============================================================================
 //------------------------------Value------------------------------------------
 // Compute sqrt
-const Type *SqrtDNode::Value( PhaseTransform *phase ) const {
+const Type* SqrtDNode::Value(PhaseGVN* phase) const {
   const Type *t1 = phase->type( in(1) );
   if( t1 == Type::TOP ) return Type::TOP;
   if( t1->base() != Type::DoubleCon ) return Type::DOUBLE;
@@ -1477,30 +1477,8 @@
 
 //=============================================================================
 //------------------------------Value------------------------------------------
-// Compute cos
-const Type *CosDNode::Value( PhaseTransform *phase ) const {
-  const Type *t1 = phase->type( in(1) );
-  if( t1 == Type::TOP ) return Type::TOP;
-  if( t1->base() != Type::DoubleCon ) return Type::DOUBLE;
-  double d = t1->getd();
-  return TypeD::make( StubRoutines::intrinsic_cos( d ) );
-}
-
-//=============================================================================
-//------------------------------Value------------------------------------------
-// Compute sin
-const Type *SinDNode::Value( PhaseTransform *phase ) const {
-  const Type *t1 = phase->type( in(1) );
-  if( t1 == Type::TOP ) return Type::TOP;
-  if( t1->base() != Type::DoubleCon ) return Type::DOUBLE;
-  double d = t1->getd();
-  return TypeD::make( StubRoutines::intrinsic_sin( d ) );
-}
-
-//=============================================================================
-//------------------------------Value------------------------------------------
 // Compute tan
-const Type *TanDNode::Value( PhaseTransform *phase ) const {
+const Type* TanDNode::Value(PhaseGVN* phase) const {
   const Type *t1 = phase->type( in(1) );
   if( t1 == Type::TOP ) return Type::TOP;
   if( t1->base() != Type::DoubleCon ) return Type::DOUBLE;
@@ -1511,7 +1489,7 @@
 //=============================================================================
 //------------------------------Value------------------------------------------
 // Compute log10
-const Type *Log10DNode::Value( PhaseTransform *phase ) const {
+const Type* Log10DNode::Value(PhaseGVN* phase) const {
   const Type *t1 = phase->type( in(1) );
   if( t1 == Type::TOP ) return Type::TOP;
   if( t1->base() != Type::DoubleCon ) return Type::DOUBLE;
--- a/hotspot/src/share/vm/opto/subnode.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/subnode.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -45,11 +45,11 @@
 
   // Handle algebraic identities here.  If we have an identity, return the Node
   // we are equivalent to.  We look for "add of zero" as an identity.
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual Node* Identity(PhaseGVN* phase);
 
   // Compute a new Type for this node.  Basically we just do the pre-check,
   // then call the virtual add() to set the type.
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   const Type* Value_common( PhaseTransform *phase ) const;
 
   // Supplied function returns the subtractend of the inputs.
@@ -97,7 +97,7 @@
 protected:
   SubFPNode( Node *in1, Node *in2 ) : SubNode(in1,in2) {}
 public:
-  const Type *Value( PhaseTransform *phase ) const;
+  const Type* Value(PhaseGVN* phase) const;
 };
 
 // NOTE: SubFNode should be taken away and replaced by add and negate
@@ -135,7 +135,7 @@
   CmpNode( Node *in1, Node *in2 ) : SubNode(in1,in2) {
     init_class_id(Class_Cmp);
   }
-  virtual Node *Identity( PhaseTransform *phase );
+  virtual Node* Identity(PhaseGVN* phase);
   const Type *add_id() const { return TypeInt::ZERO; }
   const Type *bottom_type() const { return TypeInt::CC; }
   virtual uint ideal_reg() const { return Op_RegFlags; }
@@ -165,7 +165,7 @@
   CmpUNode( Node *in1, Node *in2 ) : CmpNode(in1,in2) {}
   virtual int Opcode() const;
   virtual const Type *sub( const Type *, const Type * ) const;
-  const Type *Value( PhaseTransform *phase ) const;
+  const Type* Value(PhaseGVN* phase) const;
   bool is_index_range_check() const;
 };
 
@@ -219,7 +219,7 @@
   CmpFNode( Node *in1, Node *in2 ) : CmpNode(in1,in2) {}
   virtual int Opcode() const;
   virtual const Type *sub( const Type *, const Type * ) const { ShouldNotReachHere(); return NULL; }
-  const Type *Value( PhaseTransform *phase ) const;
+  const Type* Value(PhaseGVN* phase) const;
 };
 
 //------------------------------CmpF3Node--------------------------------------
@@ -247,7 +247,7 @@
   CmpDNode( Node *in1, Node *in2 ) : CmpNode(in1,in2) {}
   virtual int Opcode() const;
   virtual const Type *sub( const Type *, const Type * ) const { ShouldNotReachHere(); return NULL; }
-  const Type *Value( PhaseTransform *phase ) const;
+  const Type* Value(PhaseGVN* phase) const;
   virtual Node  *Ideal(PhaseGVN *phase, bool can_reshape);
 };
 
@@ -309,7 +309,7 @@
   BoolNode* negate(PhaseGVN* phase);
   virtual int Opcode() const;
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
   virtual const Type *bottom_type() const { return TypeInt::BOOL; }
   uint match_edge(uint idx) const { return 0; }
   virtual uint ideal_reg() const { return Op_RegI; }
@@ -408,35 +408,6 @@
   virtual uint ideal_reg() const { return Op_RegD; }
 };
 
-//------------------------------CosDNode---------------------------------------
-// Cosinus of a double
-class CosDNode : public Node {
-public:
-  CosDNode(Compile* C, Node *c, Node *in1) : Node(c, in1) {
-    init_flags(Flag_is_expensive);
-    C->add_expensive_node(this);
-  }
-  virtual int Opcode() const;
-  const Type *bottom_type() const { return Type::DOUBLE; }
-  virtual uint ideal_reg() const { return Op_RegD; }
-  virtual const Type *Value( PhaseTransform *phase ) const;
-};
-
-//------------------------------CosDNode---------------------------------------
-// Sinus of a double
-class SinDNode : public Node {
-public:
-  SinDNode(Compile* C, Node *c, Node *in1) : Node(c, in1) {
-    init_flags(Flag_is_expensive);
-    C->add_expensive_node(this);
-  }
-  virtual int Opcode() const;
-  const Type *bottom_type() const { return Type::DOUBLE; }
-  virtual uint ideal_reg() const { return Op_RegD; }
-  virtual const Type *Value( PhaseTransform *phase ) const;
-};
-
-
 //------------------------------TanDNode---------------------------------------
 // tangens of a double
 class TanDNode : public Node {
@@ -448,7 +419,7 @@
   virtual int Opcode() const;
   const Type *bottom_type() const { return Type::DOUBLE; }
   virtual uint ideal_reg() const { return Op_RegD; }
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
 };
 
 
@@ -474,7 +445,7 @@
   virtual int Opcode() const;
   const Type *bottom_type() const { return Type::DOUBLE; }
   virtual uint ideal_reg() const { return Op_RegD; }
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
 };
 
 //------------------------------Log10DNode---------------------------------------
@@ -488,7 +459,7 @@
   virtual int Opcode() const;
   const Type *bottom_type() const { return Type::DOUBLE; }
   virtual uint ideal_reg() const { return Op_RegD; }
-  virtual const Type *Value( PhaseTransform *phase ) const;
+  virtual const Type* Value(PhaseGVN* phase) const;
 };
 
 //-------------------------------ReverseBytesINode--------------------------------
--- a/hotspot/src/share/vm/opto/superword.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/opto/superword.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -3438,10 +3438,12 @@
     if (opc == Op_ConvI2L) {
       n = n->in(1);
     }
-    _negate_invar = negate;
-    _invar = n;
-    NOT_PRODUCT(_tracer.offset_plus_k_10(n, _invar, _negate_invar, _offset);)
-    return true;
+    if (n->bottom_type()->isa_int()) {
+      _negate_invar = negate;
+      _invar = n;
+      NOT_PRODUCT(_tracer.offset_plus_k_10(n, _invar, _negate_invar, _offset);)
+      return true;
+    }
   }
 
   NOT_PRODUCT(_tracer.offset_plus_k_11(n);)
--- a/hotspot/src/share/vm/prims/jvm.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/prims/jvm.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -2104,6 +2104,56 @@
 }
 JVM_END
 
+JVM_ENTRY(jint, JVM_ConstantPoolGetClassRefIndexAt(JNIEnv *env, jobject obj, jobject unused, jint index))
+{
+  JVMWrapper("JVM_ConstantPoolGetClassRefIndexAt");
+  JvmtiVMObjectAllocEventCollector oam;
+  constantPoolHandle cp(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj)));
+  bounds_check(cp, index, CHECK_0);
+  constantTag tag = cp->tag_at(index);
+  if (!tag.is_field_or_method()) {
+    THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index");
+  }
+  return (jint) cp->uncached_klass_ref_index_at(index);
+}
+JVM_END
+
+JVM_ENTRY(jint, JVM_ConstantPoolGetNameAndTypeRefIndexAt(JNIEnv *env, jobject obj, jobject unused, jint index))
+{
+  JVMWrapper("JVM_ConstantPoolGetNameAndTypeRefIndexAt");
+  JvmtiVMObjectAllocEventCollector oam;
+  constantPoolHandle cp(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj)));
+  bounds_check(cp, index, CHECK_0);
+  constantTag tag = cp->tag_at(index);
+  if (!tag.is_invoke_dynamic() && !tag.is_field_or_method()) {
+    THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index");
+  }
+  return (jint) cp->uncached_name_and_type_ref_index_at(index);
+}
+JVM_END
+
+JVM_ENTRY(jobjectArray, JVM_ConstantPoolGetNameAndTypeRefInfoAt(JNIEnv *env, jobject obj, jobject unused, jint index))
+{
+  JVMWrapper("JVM_ConstantPoolGetNameAndTypeRefInfoAt");
+  JvmtiVMObjectAllocEventCollector oam;
+  constantPoolHandle cp(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj)));
+  bounds_check(cp, index, CHECK_NULL);
+  constantTag tag = cp->tag_at(index);
+  if (!tag.is_name_and_type()) {
+    THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index");
+  }
+  Symbol* member_name = cp->symbol_at(cp->name_ref_index_at(index));
+  Symbol* member_sig = cp->symbol_at(cp->signature_ref_index_at(index));
+  objArrayOop dest_o = oopFactory::new_objArray(SystemDictionary::String_klass(), 2, CHECK_NULL);
+  objArrayHandle dest(THREAD, dest_o);
+  Handle str = java_lang_String::create_from_symbol(member_name, CHECK_NULL);
+  dest->obj_at_put(0, str());
+  str = java_lang_String::create_from_symbol(member_sig, CHECK_NULL);
+  dest->obj_at_put(1, str());
+  return (jobjectArray) JNIHandles::make_local(dest());
+}
+JVM_END
+
 JVM_ENTRY(jint, JVM_ConstantPoolGetIntAt(JNIEnv *env, jobject obj, jobject unused, jint index))
 {
   JVMWrapper("JVM_ConstantPoolGetIntAt");
@@ -2186,6 +2236,28 @@
 }
 JVM_END
 
+JVM_ENTRY(jbyte, JVM_ConstantPoolGetTagAt(JNIEnv *env, jobject obj, jobject unused, jint index))
+{
+  JVMWrapper("JVM_ConstantPoolGetTagAt");
+  constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj)));
+  bounds_check(cp, index, CHECK_0);
+  constantTag tag = cp->tag_at(index);
+  jbyte result = tag.value();
+  // If returned tag values are not from the JVM spec, e.g. tags from 100 to 105,
+  // they are changed to the corresponding tags from the JVM spec, so that java code in
+  // sun.reflect.ConstantPool will return only tags from the JVM spec, not internal ones.
+  if (tag.is_klass_or_reference()) {
+      result = JVM_CONSTANT_Class;
+  } else if (tag.is_string_index()) {
+      result = JVM_CONSTANT_String;
+  } else if (tag.is_method_type_in_error()) {
+      result = JVM_CONSTANT_MethodType;
+  } else if (tag.is_method_handle_in_error()) {
+      result = JVM_CONSTANT_MethodHandle;
+  }
+  return result;
+}
+JVM_END
 
 // Assertion support. //////////////////////////////////////////////////////////
 
--- a/hotspot/src/share/vm/prims/jvm.h	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/prims/jvm.h	Fri Jan 15 09:15:33 2016 +0100
@@ -87,7 +87,7 @@
  *    class.
  */
 
-#define JVM_INTERFACE_VERSION 4
+#define JVM_INTERFACE_VERSION 5
 
 JNIEXPORT jobjectArray JNICALL
 JVM_GetMethodParameters(JNIEnv *env, jobject method);
@@ -532,6 +532,15 @@
 JNIEXPORT jobjectArray JNICALL JVM_ConstantPoolGetMemberRefInfoAt
 (JNIEnv *env, jobject obj, jobject unused, jint index);
 
+JNIEXPORT jobjectArray JNICALL JVM_ConstantPoolGetNameAndTypeRefInfoAt
+(JNIEnv *env, jobject obj, jobject unused, jint index);
+
+JNIEXPORT jint JNICALL JVM_ConstantPoolGetNameAndTypeRefIndexAt
+(JNIEnv *env, jobject obj, jobject unused, jint index);
+
+JNIEXPORT jint JNICALL JVM_ConstantPoolGetClassRefIndexAt
+(JNIEnv *env, jobject obj, jobject unused, jint index);
+
 JNIEXPORT jint JNICALL JVM_ConstantPoolGetIntAt
 (JNIEnv *env, jobject obj, jobject unused, jint index);
 
@@ -550,6 +559,9 @@
 JNIEXPORT jstring JNICALL JVM_ConstantPoolGetUTF8At
 (JNIEnv *env, jobject obj, jobject unused, jint index);
 
+JNIEXPORT jbyte JNICALL JVM_ConstantPoolGetTagAt
+(JNIEnv *env, jobject unused, jobject jcpool, jint index);
+
 /*
  * java.security.*
  */
--- a/hotspot/src/share/vm/prims/methodHandles.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/prims/methodHandles.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -202,6 +202,7 @@
     assert(m_klass->verify_itable_index(vmindex), "");
     flags |= IS_METHOD | (JVM_REF_invokeInterface << REFERENCE_KIND_SHIFT);
     if (TraceInvokeDynamic) {
+      ttyLocker ttyl;
       ResourceMark rm;
       tty->print_cr("memberName: invokeinterface method_holder::method: %s, itableindex: %d, access_flags:",
             Method::name_and_sig_as_C_string(m->method_holder(), m->name(), m->signature()),
@@ -242,6 +243,7 @@
       m_klass = m_klass_non_interface;
     }
     if (TraceInvokeDynamic) {
+      ttyLocker ttyl;
       ResourceMark rm;
       tty->print_cr("memberName: invokevirtual method_holder::method: %s, receiver: %s, vtableindex: %d, access_flags:",
             Method::name_and_sig_as_C_string(m->method_holder(), m->name(), m->signature()),
--- a/hotspot/src/share/vm/prims/whitebox.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/prims/whitebox.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -565,14 +565,15 @@
   methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(method_id));
 
   DirectiveSet* directive;
+  AbstractCompiler* comp = CompileBroker::compiler((int)compLevel);
   if (compilation_context != NULL) {
     compilation_context_id = reflected_method_to_jmid(thread, env, compilation_context);
     CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
     methodHandle cch(THREAD, Method::checked_resolve_jmethod_id(compilation_context_id));
-    directive = DirectivesStack::getMatchingDirective(cch, CompileBroker::compiler((int)compLevel));
+    directive = DirectivesStack::getMatchingDirective(cch, comp);
   } else {
     // Calling with NULL matches default directive
-    directive = DirectivesStack::getDefaultDirective(CompileBroker::compiler((int)compLevel));
+    directive = DirectivesStack::getDefaultDirective(comp);
   }
   bool result = CompileBroker::compiler(compLevel)->is_intrinsic_available(mh, directive);
   DirectivesStack::release(directive);
--- a/hotspot/src/share/vm/runtime/advancedThresholdPolicy.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/runtime/advancedThresholdPolicy.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -165,7 +165,7 @@
 // Called with the queue locked and with at least one element
 CompileTask* AdvancedThresholdPolicy::select_task(CompileQueue* compile_queue) {
 #if INCLUDE_JVMCI
-  CompileTask *max_non_jvmci_task = NULL;
+  CompileTask *max_blocking_task = NULL;
 #endif
   CompileTask *max_task = NULL;
   Method* max_method = NULL;
@@ -197,13 +197,25 @@
         max_method = method;
       }
     }
+#if INCLUDE_JVMCI
+    if (UseJVMCICompiler && task->is_blocking()) {
+      if (max_blocking_task == NULL || compare_methods(method, max_blocking_task->method())) {
+        max_blocking_task = task;
+      }
+    }
+#endif
     task = next_task;
   }
 
 #if INCLUDE_JVMCI
   if (UseJVMCICompiler) {
-    if (max_non_jvmci_task != NULL) {
-      max_task = max_non_jvmci_task;
+    if (max_blocking_task != NULL) {
+      // In blocking compilation mode, the CompileBroker will make
+      // compilations submitted by a JVMCI compiler thread non-blocking. These
+      // compilations should be scheduled after all blocking compilations
+      // to service non-compiler related compilations sooner and reduce the
+      // chance of such compilations timing out.
+      max_task = max_blocking_task;
       max_method = max_task->method();
     }
   }
--- a/hotspot/src/share/vm/runtime/compilationPolicy.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/runtime/compilationPolicy.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -159,6 +159,26 @@
   return !delay_compilation_during_startup() && CompileBroker::should_compile_new_jobs();
 }
 
+CompileTask* CompilationPolicy::select_task_helper(CompileQueue* compile_queue) {
+#if INCLUDE_JVMCI
+  if (UseJVMCICompiler && !BackgroundCompilation) {
+    /*
+     * In blocking compilation mode, the CompileBroker will make
+     * compilations submitted by a JVMCI compiler thread non-blocking. These
+     * compilations should be scheduled after all blocking compilations
+     * to service non-compiler related compilations sooner and reduce the
+     * chance of such compilations timing out.
+     */
+    for (CompileTask* task = compile_queue->first(); task != NULL; task = task->next()) {
+      if (task->is_blocking()) {
+        return task;
+      }
+    }
+  }
+#endif
+  return compile_queue->first();
+}
+
 #ifndef PRODUCT
 void CompilationPolicy::print_time() {
   tty->print_cr ("Accumulated compilationPolicy times:");
@@ -339,7 +359,7 @@
 }
 
 CompileTask* NonTieredCompPolicy::select_task(CompileQueue* compile_queue) {
-  return compile_queue->first();
+  return select_task_helper(compile_queue);
 }
 
 bool NonTieredCompPolicy::is_mature(Method* method) {
--- a/hotspot/src/share/vm/runtime/compilationPolicy.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/runtime/compilationPolicy.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -58,6 +58,8 @@
   static void set_policy(CompilationPolicy* policy) { _policy = policy; }
   static CompilationPolicy* policy()                { return _policy; }
 
+  static CompileTask* select_task_helper(CompileQueue* compile_queue);
+
   // Profiling
   elapsedTimer* accumulated_time() { return &_accumulated_time; }
   void print_time() PRODUCT_RETURN;
--- a/hotspot/src/share/vm/runtime/java.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/runtime/java.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -432,8 +432,7 @@
   if (HAS_PENDING_EXCEPTION) {
     Handle exception(THREAD, PENDING_EXCEPTION);
     CLEAR_PENDING_EXCEPTION;
-    ttyLocker ttyl;
-    java_lang_Throwable::print_stack_trace(exception, tty);
+    java_lang_Throwable::java_printStackTrace(exception, THREAD);
   }
 #endif
 
--- a/hotspot/src/share/vm/runtime/sharedRuntime.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/runtime/sharedRuntime.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -726,6 +726,7 @@
 #endif
 
   if (t == NULL) {
+    ttyLocker ttyl;
     tty->print_cr("MISSING EXCEPTION HANDLER for pc " INTPTR_FORMAT " and handler bci %d", p2i(ret_pc), handler_bci);
     tty->print_cr("   Exception:");
     exception->print();
@@ -2759,7 +2760,7 @@
 
         DirectiveSet* directive = DirectivesStack::getDefaultDirective(CompileBroker::compiler(CompLevel_simple));
         if (directive->PrintAssemblyOption) {
-          Disassembler::decode(nm, tty);
+          nm->print_code();
         }
         DirectivesStack::release(directive);
       }
--- a/hotspot/src/share/vm/runtime/simpleThresholdPolicy.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/runtime/simpleThresholdPolicy.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -168,7 +168,7 @@
 
 // Called with the queue locked and with at least one element
 CompileTask* SimpleThresholdPolicy::select_task(CompileQueue* compile_queue) {
-  return compile_queue->first();
+  return select_task_helper(compile_queue);
 }
 
 void SimpleThresholdPolicy::reprofile(ScopeDesc* trap_scope, bool is_osr) {
--- a/hotspot/src/share/vm/runtime/stubRoutines.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/runtime/stubRoutines.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -155,6 +155,10 @@
 address StubRoutines::_dexp = NULL;
 address StubRoutines::_dlog = NULL;
 address StubRoutines::_dpow = NULL;
+address StubRoutines::_dsin = NULL;
+address StubRoutines::_dcos = NULL;
+address StubRoutines::_dlibm_sin_cos_huge = NULL;
+address StubRoutines::_dlibm_reduce_pi04l = NULL;
 
 double (* StubRoutines::_intrinsic_log10 )(double) = NULL;
 double (* StubRoutines::_intrinsic_sin   )(double) = NULL;
--- a/hotspot/src/share/vm/runtime/stubRoutines.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/runtime/stubRoutines.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -214,6 +214,10 @@
   static address _dexp;
   static address _dlog;
   static address _dpow;
+  static address _dsin;
+  static address _dcos;
+  static address _dlibm_sin_cos_huge;
+  static address _dlibm_reduce_pi04l;
 
   // These are versions of the java.lang.Math methods which perform
   // the same operations as the intrinsic version.  They are used for
@@ -388,6 +392,10 @@
   static address dexp()                { return _dexp; }
   static address dlog()                { return _dlog; }
   static address dpow()                { return _dpow; }
+  static address dsin()                { return _dsin; }
+  static address dcos()                { return _dcos; }
+  static address dlibm_reduce_pi04l()  { return _dlibm_reduce_pi04l; }
+  static address dlibm_sin_cos_huge()  { return _dlibm_sin_cos_huge; }
 
   static address select_fill_function(BasicType t, bool aligned, const char* &name);
 
--- a/hotspot/src/share/vm/runtime/vframe.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/runtime/vframe.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -406,6 +406,7 @@
     // as it were a native compiled frame (no Java-level assumptions).
 #ifdef ASSERT
     if (WizardMode) {
+      ttyLocker ttyl;
       tty->print_cr("Error in fill_from_frame: pc_desc for "
                     INTPTR_FORMAT " not found or invalid at %d",
                     p2i(_frame.pc()), decode_offset);
--- a/hotspot/src/share/vm/runtime/vmStructs.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/runtime/vmStructs.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -862,6 +862,8 @@
      static_field(StubRoutines,                _dexp,                                         address)                               \
      static_field(StubRoutines,                _dlog,                                         address)                               \
      static_field(StubRoutines,                _dpow,                                         address)                               \
+     static_field(StubRoutines,                _dsin,                                         address)                               \
+     static_field(StubRoutines,                _dcos,                                         address)                               \
      static_field(StubRoutines,                _vectorizedMismatch,                           address)                               \
      static_field(StubRoutines,                _jbyte_arraycopy,                              address)                               \
      static_field(StubRoutines,                _jshort_arraycopy,                             address)                               \
@@ -2056,8 +2058,6 @@
   declare_c2_type(NegNode, Node)                                          \
   declare_c2_type(NegFNode, NegNode)                                      \
   declare_c2_type(NegDNode, NegNode)                                      \
-  declare_c2_type(CosDNode, Node)                                         \
-  declare_c2_type(SinDNode, Node)                                         \
   declare_c2_type(TanDNode, Node)                                         \
   declare_c2_type(AtanDNode, Node)                                        \
   declare_c2_type(SqrtDNode, Node)                                        \
@@ -2397,7 +2397,7 @@
   declare_constant(JVM_ACC_HAS_MIRANDA_METHODS)                           \
   declare_constant(JVM_ACC_HAS_VANILLA_CONSTRUCTOR)                       \
   declare_constant(JVM_ACC_HAS_FINALIZER)                                 \
-  declare_constant(JVM_ACC_IS_CLONEABLE)                                  \
+  declare_constant(JVM_ACC_IS_CLONEABLE_FAST)                             \
   declare_constant(JVM_ACC_HAS_LOCAL_VARIABLE_TABLE)                      \
   declare_constant(JVM_ACC_PROMOTED_FLAGS)                                \
   declare_constant(JVM_ACC_FIELD_ACCESS_WATCHED)                          \
--- a/hotspot/src/share/vm/utilities/accessFlags.hpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/utilities/accessFlags.hpp	Fri Jan 15 09:15:33 2016 +0100
@@ -61,7 +61,7 @@
   JVM_ACC_HAS_MIRANDA_METHODS     = 0x10000000,     // True if this class has miranda methods in it's vtable
   JVM_ACC_HAS_VANILLA_CONSTRUCTOR = 0x20000000,     // True if klass has a vanilla default constructor
   JVM_ACC_HAS_FINALIZER           = 0x40000000,     // True if klass has a non-empty finalize() method
-  JVM_ACC_IS_CLONEABLE            = (int)0x80000000,// True if klass supports the Clonable interface
+  JVM_ACC_IS_CLONEABLE_FAST       = (int)0x80000000,// True if klass implements the Cloneable interface and can be optimized in generated code
   JVM_ACC_HAS_FINAL_METHOD        = 0x01000000,     // True if klass has final method
 
   // Klass* and Method* flags
@@ -143,7 +143,7 @@
   bool has_vanilla_constructor () const { return (_flags & JVM_ACC_HAS_VANILLA_CONSTRUCTOR) != 0; }
   bool has_finalizer           () const { return (_flags & JVM_ACC_HAS_FINALIZER          ) != 0; }
   bool has_final_method        () const { return (_flags & JVM_ACC_HAS_FINAL_METHOD       ) != 0; }
-  bool is_cloneable            () const { return (_flags & JVM_ACC_IS_CLONEABLE           ) != 0; }
+  bool is_cloneable_fast       () const { return (_flags & JVM_ACC_IS_CLONEABLE_FAST      ) != 0; }
   // Klass* and Method* flags
   bool has_localvariable_table () const { return (_flags & JVM_ACC_HAS_LOCAL_VARIABLE_TABLE) != 0; }
   void set_has_localvariable_table()    { atomic_set_bits(JVM_ACC_HAS_LOCAL_VARIABLE_TABLE); }
@@ -210,7 +210,7 @@
   void set_has_vanilla_constructor()   { atomic_set_bits(JVM_ACC_HAS_VANILLA_CONSTRUCTOR); }
   void set_has_finalizer()             { atomic_set_bits(JVM_ACC_HAS_FINALIZER);           }
   void set_has_final_method()          { atomic_set_bits(JVM_ACC_HAS_FINAL_METHOD);        }
-  void set_is_cloneable()              { atomic_set_bits(JVM_ACC_IS_CLONEABLE);            }
+  void set_is_cloneable_fast()         { atomic_set_bits(JVM_ACC_IS_CLONEABLE_FAST);       }
   void set_has_miranda_methods()       { atomic_set_bits(JVM_ACC_HAS_MIRANDA_METHODS);     }
 
  public:
--- a/hotspot/src/share/vm/utilities/debug.cpp	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/src/share/vm/utilities/debug.cpp	Fri Jan 15 09:15:33 2016 +0100
@@ -480,12 +480,13 @@
 extern "C" void disnm(intptr_t p) {
   Command c("disnm");
   CodeBlob* cb = CodeCache::find_blob((address) p);
-  nmethod* nm = cb->as_nmethod_or_null();
-  if (nm) {
-    nm->print();
-    Disassembler::decode(nm);
-  } else {
-    cb->print();
+  if (cb != NULL) {
+    nmethod* nm = cb->as_nmethod_or_null();
+    if (nm != NULL) {
+      nm->print();
+    } else {
+      cb->print();
+    }
     Disassembler::decode(cb);
   }
 }
--- a/hotspot/test/TEST.groups	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/test/TEST.groups	Fri Jan 15 09:15:33 2016 +0100
@@ -288,6 +288,7 @@
   compiler/jsr292/ \
   compiler/loopopts/ \
   compiler/macronodes/ \
+  compiler/memoryinitialization/ \
   compiler/osr/ \
   compiler/regalloc/ \
   compiler/runtime/ \
--- a/hotspot/test/compiler/c2/6772683/InterruptedTest.java	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/test/compiler/c2/6772683/InterruptedTest.java	Fri Jan 15 09:15:33 2016 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,12 +26,39 @@
  * @test
  * @bug 6772683
  * @summary Thread.isInterrupted() fails to return true on multiprocessor PC
- * @run main/othervm InterruptedTest
+ * @run main/othervm InterruptedTest 100
  */
 
 public class InterruptedTest {
 
     public static void main(String[] args) throws Exception {
+        /* The value of the threshold determines for how many seconds
+         * the main thread must wait for the worker thread. On highly
+         * loaded systems it can take a while until the worker thread
+         * obtains CPU time and is able to check if it was interrupted
+         * by the main thread. The higher the threshold the likelier
+         * the worker thread can check if it was interrupted (that is
+         * required for successul test execution).
+         */
+        int threshold = 100;
+
+        if (args.length != 1) {
+            System.out.println("Incorrect number of arguments");
+            System.exit(1);
+        }
+
+        try {
+            threshold = Integer.parseInt(args[0]);
+        } catch (NumberFormatException e) {
+            System.out.println("Invalid argument format");
+            System.exit(1);
+        }
+
+        if (threshold < 1) {
+            System.out.println("Threshold must be at least 1");
+            System.exit(1);
+        }
+
         Thread workerThread = new Thread("worker") {
             public void run() {
                 System.out.println("Worker thread: running...");
@@ -42,24 +69,27 @@
         };
         System.out.println("Main thread: starts a worker thread...");
         workerThread.start();
-        System.out.println("Main thread: waits at most 5s for the worker thread to die...");
+        System.out.println("Main thread: waits 5 seconds after starting the worker thread");
         workerThread.join(5000); // Wait 5 sec to let run() method to be compiled
+
         int ntries = 0;
-        while (workerThread.isAlive() && ntries < 5) {
+        while (workerThread.isAlive() && ntries < threshold) {
             System.out.println("Main thread: interrupts the worker thread...");
             workerThread.interrupt();
             if (workerThread.isInterrupted()) {
                 System.out.println("Main thread: worker thread is interrupted");
             }
             ntries++;
-            System.out.println("Main thread: waits for the worker thread to die...");
+            System.out.println("Main thread: waits 1 second for the worker thread to die...");
             workerThread.join(1000); // Wait 1 sec and try again
         }
-        if (ntries == 5) {
-          System.out.println("Main thread: the worker thread dod not die");
+
+        if (ntries == threshold) {
+          System.out.println("Main thread: the worker thread did not die after " +
+                             ntries + " seconds have elapsed");
           System.exit(97);
         }
+
         System.out.println("Main thread: bye");
     }
-
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/controldependency/TestEliminatedCastPPAtPhi.java	Fri Jan 15 09:15:33 2016 +0100
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+/**
+ * @test
+ * @bug 8139771
+ * @summary Eliminating CastPP nodes at Phis when they all come from a unique input may cause crash
+ * @requires vm.gc=="Serial" | vm.gc=="Parallel"
+ * @run main/othervm -XX:-BackgroundCompilation -XX:-UseOnStackReplacement -XX:+IgnoreUnrecognizedVMOptions -XX:+StressGCM TestEliminatedCastPPAtPhi
+ *
+ */
+
+public class TestEliminatedCastPPAtPhi {
+
+    static TestEliminatedCastPPAtPhi saved;
+    static TestEliminatedCastPPAtPhi saved_not_null;
+
+    int f;
+
+    static int test(TestEliminatedCastPPAtPhi obj, int[] array, boolean flag) {
+        int ret = array[0] + array[20];
+        saved = obj;
+        if (obj == null) {
+            return ret;
+        }
+        saved_not_null = obj;
+
+        // empty loop to be optimized out. Delays range check smearing
+        // for the array access below until the if diamond is
+        // optimized out
+        int i = 0;
+        for (; i < 10; i++);
+
+        ret += array[i];
+
+        TestEliminatedCastPPAtPhi res;
+        if (flag) {
+            // load is optimized out and res is obj here
+            res = saved;
+        } else {
+            // load is optimized out and res is non null CastPP of res here
+            res = saved_not_null;
+        }
+        // null check + CastPP here for res field load below
+
+        // 1) null check is pushed in the branches of the if above by
+        // split through phi because res is non null in the second
+        // branch and the null check can be optimized out in that
+        // branch. The Castpp stays here.
+
+        // 2) null check in the first branch is also optimized out
+        // because a dominating null check is found (the explicit null
+        // check at the beggining of the test)
+
+        // 3) the Phi for the if above merges a CastPP'ed value and
+        // the same value so it's optimized out and replaced by the
+        // uncasted value: obj
+
+        // 4) the if above has 2 empty branches so it's optimized
+        // out. The control of the CastPP that is still here is now
+        // the success branch of the range check for the array access
+        // above
+
+        // 5) the loop above is optimized out, i = 10, the range check
+        // for the array access above is optimized out and all its
+        // uses are replaced by the range check for the array accesses
+        // at the beginning of the method. The castPP here is one of
+        // the uses and so its control is now the range check at the
+        // beginning of the method: the control of the CastPP bypasses
+        // the explicit null check
+
+        return ret + res.f;
+    }
+
+    static public void main(String[] args) {
+        int[] array = new int[100];
+        TestEliminatedCastPPAtPhi obj = new TestEliminatedCastPPAtPhi();
+        for (int i = 0; i < 20000; i++) {
+            test(obj, array, (i%2) == 0);
+        }
+        test(null, array, true);
+    }
+
+}
--- a/hotspot/test/compiler/intrinsics/IntrinsicAvailableTest.java	Thu Jan 14 20:57:31 2016 -0800
+++ b/hotspot/test/compiler/intrinsics/IntrinsicAvailableTest.java	Fri Jan 15 09:15:33 2016 +0100
@@ -23,6 +23,8 @@
 import java.lang.reflect.Executable;
 import java.util.concurrent.Callable;
 import java.util.Objects;
+
+import jdk.test.lib.*;
 import compiler.whitebox.CompilerWhiteBoxTest;
 /*
  * @test
@@ -105,17 +107,16 @@
         }
     }
 
-    protected boolean isServerVM() {
-        return VMName.toLowerCase().contains("server");
-    }
-
     public void test() throws Exception {
         Executable intrinsicMethod = testCase.getExecutable();
-        if (isServerVM()) {
+        if (Platform.isServer()) {
             if (TIERED_COMPILATION) {
                 checkIntrinsicForCompilationLevel(intrinsicMethod, COMP_LEVEL_SIMPLE);
             }
-            checkIntrinsicForCompilationLevel(intrinsicMethod, COMP_LEVEL_FULL_OPTIMIZATION);
+            // Dont bother check JVMCI compiler - returns false on all intrinsics.
+            if (!Boolean.valueOf(getVMOption("UseJVMCICompiler"))) {
+                checkIntrinsicForCompilationLevel(intrinsicMethod, COMP_LEVEL_FULL_OPTIMIZATION);
+            }
         } else {
             checkIntrinsicForCompilationLevel(intrinsicMethod, COMP_LEVEL_SIMPLE);
         }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/loopopts/BadPredicateAfterPartialPeel.java	Fri Jan 15 09:15:33 2016 +0100
@@ -0,0 +1,312 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+/**
+ * @test
+ * @bug 8146792
+ * @summary Predicate moved after partial peel may lead to broken graph
+ * @run main/othervm -XX:-TieredCompilation -XX:-BackgroundCompilation -XX:-UseOnStackReplacement -XX:CompileOnly=BadPredicateAfterPartialPeel::m -XX:CompileCommand=dontinline,BadPredicateAfterPartialPeel::not_inlined* -XX:CompileCommand=quiet BadPredicateAfterPartialPeel
+ *
+ */
+
+public class BadPredicateAfterPartialPeel {
+
+    static void not_inlined1() {}
+    static void not_inlined4() {}
+
+    static int m_helper(int i, int i3, int i4) {
+        return i3 == 4 ? i4 : i;
+    }
+
+    static float[] array = new float[1000];
+    static int[] array2 = new int[1000];
+
+    boolean flag;
+    int j;
+
+    static void m(BadPredicateAfterPartialPeel o1, BadPredicateAfterPartialPeel o2, BadPredicateAfterPartialPeel o, int i4) {
+        int i1 = 1;
+
+        // To delay partial peeling to the loop opts pass right before CCP
+        int i2 = 0;
+        for (; i2 < 10; i2 += i1);
+        i2 = i2 / 10;
+
+        // Simplified during CCP:
+        int i3 = 2;
+        for (; i3 < 4; i3 *= 2);
+
+        // Loop is partial peeled right before CCP
+        int i = 0;
+        boolean b = true;
+
+        not_inlined1();
+
+        array[0] = -1;
+        do {
+            // peeled section starts here
+            o.flag = false;
+            o.j = 0;
+
+            if (b) {
+                // The following store will be pinned between
+                // predicates and the loop after partial peeling. All
+                // control flow will be optimized out and so nothing
+                // will prevent predicates from being moved out the
+                // loop.
+                array[i] = 0;
+            }
+            if (array[0] != 0) {
+            }
+            if (i >= 10) {
+                // peeled section ends here
+                return;
+            }
+            i += i2;
+            b = false;
+            int i5 = m_helper(i, i3, i4); // This will be simpliflied during CCP
+            if (array[i5] != 0) { // and this will become a predicate
+            }
+            if (o2.flag) {
+            }
+            // A bunch of stuff to grow loop body size and prevent peeling:
+            array2[0] = 0;
+            array2[1] = 0;
+            array2[2] = 0;
+            array2[3] = 0;
+            array2[4] = 0;
+            array2[5] = 0;
+            array2[6] = 0;
+            array2[7] = 0;
+            array2[8] = 0;
+            array2[9] = 0;
+            array2[10] = 0;
+            array2[11] = 0;
+            array2[12] = 0;
+            array2[13] = 0;
+            array2[14] = 0;
+            array2[15] = 0;
+            array2[16] = 0;
+            array2[17] = 0;
+            array2[18] = 0;
+            array2[19] = 0;
+            array2[20] = 0;
+            array2[21] = 0;
+            array2[22] = 0;
+            array2[23] = 0;
+            array2[24] = 0;
+            array2[25] = 0;
+            array2[26] = 0;
+            array2[27] = 0;
+            array2[28] = 0;
+            array2[29] = 0;
+            array2[30] = 0;
+            array2[31] = 0;
+            array2[32] = 0;
+            array2[33] = 0;
+            array2[34] = 0;
+            array2[35] = 0;
+            array2[36] = 0;
+            array2[37] = 0;
+            array2[38] = 0;
+            array2[39] = 0;
+            array2[40] = 0;
+            array2[41] = 0;
+            array2[42] = 0;
+            array2[43] = 0;
+            array2[44] = 0;
+            array2[45] = 0;
+            array2[46] = 0;
+            array2[47] = 0;
+            array2[48] = 0;
+            array2[49] = 0;
+            array2[50] = 0;
+            array2[51] = 0;
+            array2[52] = 0;
+            array2[53] = 0;
+            array2[54] = 0;
+            array2[55] = 0;
+            array2[56] = 0;
+            array2[57] = 0;
+            array2[58] = 0;
+            array2[59] = 0;
+            array2[60] = 0;
+            array2[61] = 0;
+            array2[62] = 0;
+            array2[63] = 0;
+            array2[64] = 0;
+            array2[65] = 0;
+            array2[66] = 0;
+            array2[67] = 0;
+            array2[68] = 0;
+            array2[69] = 0;
+            array2[70] = 0;
+            array2[71] = 0;
+            array2[72] = 0;
+            array2[73] = 0;
+            array2[74] = 0;
+            array2[75] = 0;
+            array2[76] = 0;
+            array2[77] = 0;
+            array2[78] = 0;
+            array2[79] = 0;
+            array2[80] = 0;
+            array2[81] = 0;
+            array2[82] = 0;
+            array2[83] = 0;
+            array2[84] = 0;
+            array2[85] = 0;
+            array2[86] = 0;
+            array2[87] = 0;
+            array2[88] = 0;
+            array2[89] = 0;
+            array2[90] = 0;
+            array2[91] = 0;
+            array2[92] = 0;
+            array2[93] = 0;
+            array2[94] = 0;
+            array2[95] = 0;
+            array2[96] = 0;
+            array2[97] = 0;
+            array2[98] = 0;
+            array2[99] = 0;
+
+            array2[100] = 0;
+            array2[101] = 0;
+            array2[102] = 0;
+            array2[103] = 0;
+            array2[104] = 0;
+            array2[105] = 0;
+            array2[106] = 0;
+            array2[107] = 0;
+            array2[108] = 0;
+            array2[109] = 0;
+            array2[110] = 0;
+            array2[111] = 0;
+            array2[112] = 0;
+            array2[113] = 0;
+            array2[114] = 0;
+            array2[115] = 0;
+            array2[116] = 0;
+            array2[117] = 0;
+            array2[118] = 0;
+            array2[119] = 0;
+            array2[120] = 0;
+            array2[121] = 0;
+            array2[122] = 0;
+            array2[123] = 0;
+            array2[124] = 0;
+            array2[125] = 0;
+            array2[126] = 0;
+            array2[127] = 0;
+            array2[128] = 0;
+            array2[129] = 0;
+            array2[130] = 0;
+            array2[131] = 0;
+            array2[132] = 0;
+            array2[133] = 0;
+            array2[134] = 0;
+            array2[135] = 0;
+            array2[136] = 0;
+            array2[137] = 0;
+            array2[138] = 0;
+            array2[139] = 0;
+            array2[140] = 0;
+            array2[141] = 0;
+            array2[142] = 0;
+            array2[143] = 0;
+            array2[144] = 0;
+            array2[145] = 0;
+            array2[146] = 0;
+            array2[147] = 0;
+            array2[148] = 0;
+            array2[149] = 0;
+            array2[150] = 0;
+            array2[151] = 0;
+            array2[152] = 0;
+            array2[153] = 0;
+            array2[154] = 0;
+            array2[155] = 0;
+            array2[156] = 0;
+            array2[157] = 0;
+            array2[158] = 0;
+            array2[159] = 0;
+            array2[160] = 0;
+            array2[161] = 0;
+            array2[162] = 0;
+            array2[163] = 0;
+            array2[164] = 0;
+            array2[165] = 0;
+            array2[166] = 0;
+            array2[167] = 0;
+            array2[168] = 0;
+            array2[169] = 0;
+            array2[170] = 0;
+            array2[171] = 0;
+            array2[172] = 0;
+            array2[173] = 0;
+            array2[174] = 0;
+            array2[175] = 0;
+            array2[176] = 0;
+            array2[177] = 0;
+            array2[178] = 0;
+            array2[179] = 0;
+            array2[180] = 0;
+            array2[181] = 0;
+            array2[182] = 0;
+            array2[183] = 0;
+            array2[184] = 0;
+            array2[185] = 0;
+            array2[186] = 0;
+            array2[187] = 0;
+            array2[188] = 0;
+            array2[189] = 0;
+            array2[190] = 0;
+            array2[191] = 0;
+            array2[192] = 0;
+            array2[193] = 0;
+            array2[194] = 0;
+            array2[195] = 0;
+            array2[196] = 0;
+            array2[197] = 0;
+            array2[198] = 0;
+            array2[199] = 0;
+            if (o1.j >= 20) {
+                break;
+            }
+            o1.j++;
+        } while(true);
+        not_inlined4();
+    }
+
+    static public void main(String[] args) {
+        BadPredicateAfterPartialPeel o1 = new BadPredicateAfterPartialPeel();
+        BadPredicateAfterPartialPeel o2 = new BadPredicateAfterPartialPeel();
+        for (int i = 0; i < 20000; i++) {
+            o1.j = 0;
+            m(o1, o2, o2, 0);
+            m_helper(i, 2, i); // pollute profile
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/memoryinitialization/ZeroTLABTest.java	Fri Jan 15 09:15:33 2016 +0100
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+/*
+ * @test
+ * @bug 8086053
+ * @run main/othervm -Xcomp -XX:+UseTLAB -XX:+ZeroTLAB ZeroTLABTest
+ * @run main/othervm -Xcomp -XX:+UseTLAB -XX:-ZeroTLAB ZeroTLABTest
+ * @run main/othervm -Xcomp -XX:-UseTLAB -XX:+ZeroTLAB ZeroTLABTest
+ * @run main/othervm -Xcomp -XX:-UseTLAB -XX:-ZeroTLAB ZeroTLABTest
+ */
+public class ZeroTLABTest {
+    public static void main(String args[]) {
+        System.out.println("Test PASSED");
+    }
+}