Merge
This commit is contained in:
commit
ce74c2fa3c
1
.hgtags
1
.hgtags
@ -345,3 +345,4 @@ f9bcdce2df26678c3fe468130b535c0342c69b89 jdk-9+99
|
|||||||
4379223f8806626852c46c52d4e7a27a584b406e jdk-9+100
|
4379223f8806626852c46c52d4e7a27a584b406e jdk-9+100
|
||||||
80f67512daa15cf37b4825c1c62a675d524d7c49 jdk-9+101
|
80f67512daa15cf37b4825c1c62a675d524d7c49 jdk-9+101
|
||||||
2dc4c11fe48831854916d53c3913bdb7d49023ea jdk-9+102
|
2dc4c11fe48831854916d53c3913bdb7d49023ea jdk-9+102
|
||||||
|
4a652e4ca9523422149958673033e0ac740d5e1e jdk-9+103
|
||||||
|
@ -345,3 +345,4 @@ cf1dc4c035fb84693d4ae5ad818785cb4d1465d1 jdk9-b90
|
|||||||
c1f30ac14db0eaff398429c04cd9fab92e1b4b2a jdk-9+100
|
c1f30ac14db0eaff398429c04cd9fab92e1b4b2a jdk-9+100
|
||||||
c4d72a1620835b5d657b7b6792c2879367d0154f jdk-9+101
|
c4d72a1620835b5d657b7b6792c2879367d0154f jdk-9+101
|
||||||
6406ecf5d39482623225bb1b3098c2cac6f7d450 jdk-9+102
|
6406ecf5d39482623225bb1b3098c2cac6f7d450 jdk-9+102
|
||||||
|
47d6462e514b2097663305a57d9c844c15d5b609 jdk-9+103
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -266,14 +266,3 @@ AC_DEFUN_ONCE([HOTSPOT_SETUP_BUILD_TWEAKS],
|
|||||||
HOTSPOT_MAKE_ARGS="$HOTSPOT_TARGET"
|
HOTSPOT_MAKE_ARGS="$HOTSPOT_TARGET"
|
||||||
AC_SUBST(HOTSPOT_MAKE_ARGS)
|
AC_SUBST(HOTSPOT_MAKE_ARGS)
|
||||||
])
|
])
|
||||||
|
|
||||||
# -g is already added by ENABLE_DEBUG_SYMBOLS and the hotspot makefiles
|
|
||||||
# will basically do slowdebug builds when DEBUG_BINARIES is set for
|
|
||||||
# fastdebug builds
|
|
||||||
DEBUG_BINARIES=false
|
|
||||||
# Fastdebug builds with this setting will essentially be slowdebug
|
|
||||||
# in hotspot.
|
|
||||||
# -g is already added by ENABLE_DEBUG_SYMBOLS and the hotspot makefiles
|
|
||||||
# will basically do slowdebug builds when DEBUG_BINARIES is set for
|
|
||||||
# fastdebug builds
|
|
||||||
DEBUG_BINARIES=false
|
|
@ -144,6 +144,10 @@ AC_DEFUN_ONCE([LIB_SETUP_LLVM],
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# Due to https://llvm.org/bugs/show_bug.cgi?id=16902, llvm does not
|
||||||
|
# always properly detect -ltinfo
|
||||||
|
LLVM_LIBS="${LLVM_LIBS} -ltinfo"
|
||||||
|
|
||||||
AC_SUBST(LLVM_CFLAGS)
|
AC_SUBST(LLVM_CFLAGS)
|
||||||
AC_SUBST(LLVM_LDFLAGS)
|
AC_SUBST(LLVM_LDFLAGS)
|
||||||
AC_SUBST(LLVM_LIBS)
|
AC_SUBST(LLVM_LIBS)
|
||||||
|
@ -500,7 +500,7 @@ JAVAC_FLAGS?=@JAVAC_FLAGS@
|
|||||||
INTERIM_LANGTOOLS_JAR = $(BUILDTOOLS_OUTPUTDIR)/interim_langtools.jar
|
INTERIM_LANGTOOLS_JAR = $(BUILDTOOLS_OUTPUTDIR)/interim_langtools.jar
|
||||||
INTERIM_LANGTOOLS_ARGS = "-Xbootclasspath/p:$(INTERIM_LANGTOOLS_JAR)" -cp $(INTERIM_LANGTOOLS_JAR)
|
INTERIM_LANGTOOLS_ARGS = "-Xbootclasspath/p:$(INTERIM_LANGTOOLS_JAR)" -cp $(INTERIM_LANGTOOLS_JAR)
|
||||||
NEW_JAVAC = $(INTERIM_LANGTOOLS_ARGS) com.sun.tools.javac.Main
|
NEW_JAVAC = $(INTERIM_LANGTOOLS_ARGS) com.sun.tools.javac.Main
|
||||||
NEW_JAVADOC = $(INTERIM_LANGTOOLS_ARGS) com.sun.tools.javadoc.Main
|
NEW_JAVADOC = $(INTERIM_LANGTOOLS_ARGS) jdk.javadoc.internal.tool.Main
|
||||||
|
|
||||||
# Base flags for RC
|
# Base flags for RC
|
||||||
# Guarding this against resetting value. Legacy make files include spec multiple
|
# Guarding this against resetting value. Legacy make files include spec multiple
|
||||||
|
@ -433,39 +433,22 @@ AC_DEFUN([TOOLCHAIN_FIND_COMPILER],
|
|||||||
# Now we have a compiler binary in $1. Make sure it's okay.
|
# Now we have a compiler binary in $1. Make sure it's okay.
|
||||||
BASIC_FIXUP_EXECUTABLE($1)
|
BASIC_FIXUP_EXECUTABLE($1)
|
||||||
TEST_COMPILER="[$]$1"
|
TEST_COMPILER="[$]$1"
|
||||||
# Don't remove symbolic links on AIX because 'xlc_r' and 'xlC_r' may all be links
|
|
||||||
# to 'xlc' but it is crucial that we invoke the compiler with the right name!
|
|
||||||
if test "x$OPENJDK_BUILD_OS" != xaix; then
|
|
||||||
# FIXME: This test should not be needed anymore; we don't do that for any platform.
|
|
||||||
AC_MSG_CHECKING([resolved symbolic links for $1])
|
|
||||||
BASIC_REMOVE_SYMBOLIC_LINKS(TEST_COMPILER)
|
|
||||||
AC_MSG_RESULT([$TEST_COMPILER])
|
|
||||||
fi
|
|
||||||
AC_MSG_CHECKING([if $1 is disguised ccache])
|
|
||||||
|
|
||||||
COMPILER_BASENAME=`$BASENAME "$TEST_COMPILER"`
|
AC_MSG_CHECKING([resolved symbolic links for $1])
|
||||||
if test "x$COMPILER_BASENAME" = "xccache"; then
|
SYMLINK_ORIGINAL="$TEST_COMPILER"
|
||||||
AC_MSG_RESULT([yes, trying to find proper $COMPILER_NAME compiler])
|
BASIC_REMOVE_SYMBOLIC_LINKS(SYMLINK_ORIGINAL)
|
||||||
# We /usr/lib/ccache in the path, so cc is a symlink to /usr/bin/ccache.
|
if test "x$TEST_COMPILER" = "x$SYMLINK_ORIGINAL"; then
|
||||||
# We want to control ccache invocation ourselves, so ignore this cc and try
|
AC_MSG_RESULT([no symlink])
|
||||||
# searching again.
|
|
||||||
|
|
||||||
# Remove the path to the fake ccache cc from the PATH
|
|
||||||
RETRY_COMPILER_SAVED_PATH="$PATH"
|
|
||||||
COMPILER_DIRNAME=`$DIRNAME [$]$1`
|
|
||||||
PATH="`$ECHO $PATH | $SED -e "s,$COMPILER_DIRNAME,,g" -e "s,::,:,g" -e "s,^:,,g"`"
|
|
||||||
|
|
||||||
# Try again looking for our compiler
|
|
||||||
AC_CHECK_TOOLS(PROPER_COMPILER_$1, $3)
|
|
||||||
BASIC_FIXUP_EXECUTABLE(PROPER_COMPILER_$1)
|
|
||||||
PATH="$RETRY_COMPILER_SAVED_PATH"
|
|
||||||
|
|
||||||
AC_MSG_CHECKING([for resolved symbolic links for $1])
|
|
||||||
BASIC_REMOVE_SYMBOLIC_LINKS(PROPER_COMPILER_$1)
|
|
||||||
AC_MSG_RESULT([$PROPER_COMPILER_$1])
|
|
||||||
$1="$PROPER_COMPILER_$1"
|
|
||||||
else
|
else
|
||||||
AC_MSG_RESULT([no, keeping $1])
|
AC_MSG_RESULT([$SYMLINK_ORIGINAL])
|
||||||
|
|
||||||
|
# We can't handle ccache by gcc wrappers, since we need to know if we're
|
||||||
|
# using ccache. Instead ccache usage must be controlled by a configure option.
|
||||||
|
COMPILER_BASENAME=`$BASENAME "$SYMLINK_ORIGINAL"`
|
||||||
|
if test "x$COMPILER_BASENAME" = "xccache"; then
|
||||||
|
AC_MSG_NOTICE([Please use --enable-ccache instead of providing a wrapped compiler.])
|
||||||
|
AC_MSG_ERROR([$TEST_COMPILER is a symbolic link to ccache. This is not supported.])
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
TOOLCHAIN_CHECK_COMPILER_VERSION([$1], [$COMPILER_NAME])
|
TOOLCHAIN_CHECK_COMPILER_VERSION([$1], [$COMPILER_NAME])
|
||||||
|
@ -306,7 +306,7 @@ compare_general_files() {
|
|||||||
! -name "*.lib" ! -name "*.war" ! -name "JavaControlPanel" \
|
! -name "*.lib" ! -name "*.war" ! -name "JavaControlPanel" \
|
||||||
! -name "*.obj" ! -name "*.o" ! -name "JavaControlPanelHelper" \
|
! -name "*.obj" ! -name "*.o" ! -name "JavaControlPanelHelper" \
|
||||||
! -name "JavaUpdater" ! -name "JavaWSApplicationStub" \
|
! -name "JavaUpdater" ! -name "JavaWSApplicationStub" \
|
||||||
! -name "jspawnhelper" \
|
! -name "jspawnhelper" ! -name "*.a" \
|
||||||
| $GREP -v "./bin/" | $SORT | $FILTER)
|
| $GREP -v "./bin/" | $SORT | $FILTER)
|
||||||
|
|
||||||
echo Other files with binary differences...
|
echo Other files with binary differences...
|
||||||
@ -939,7 +939,7 @@ compare_all_libs() {
|
|||||||
WORK_DIR=$3
|
WORK_DIR=$3
|
||||||
|
|
||||||
LIBS=$(cd $THIS_DIR && $FIND . -type f \( -name 'lib*.so' -o -name '*.dylib' \
|
LIBS=$(cd $THIS_DIR && $FIND . -type f \( -name 'lib*.so' -o -name '*.dylib' \
|
||||||
-o -name '*.dll' -o -name '*.obj' -o -name '*.o' \
|
-o -name '*.dll' -o -name '*.obj' -o -name '*.o' -o -name '*.a' \
|
||||||
-o -name '*.cpl' \) | $SORT | $FILTER)
|
-o -name '*.cpl' \) | $SORT | $FILTER)
|
||||||
|
|
||||||
if [ -n "$LIBS" ]; then
|
if [ -n "$LIBS" ]; then
|
||||||
|
@ -345,3 +345,4 @@ ea285530245cf4e0edf0479121a41347d3030eba jdk-9+98
|
|||||||
791d0d3ac0138faeb6110bd840a4545bc1950df2 jdk-9+100
|
791d0d3ac0138faeb6110bd840a4545bc1950df2 jdk-9+100
|
||||||
30dfb3bd3d06b4bb80a087babc0d1841edba187b jdk-9+101
|
30dfb3bd3d06b4bb80a087babc0d1841edba187b jdk-9+101
|
||||||
9c4662334d933d299928d1f599d02ff50777cbf8 jdk-9+102
|
9c4662334d933d299928d1f599d02ff50777cbf8 jdk-9+102
|
||||||
|
0680fb7dae4da1ee6cf783c4b74184e3e08d3179 jdk-9+103
|
||||||
|
@ -505,3 +505,4 @@ f008e8cc10d5b3212fb22d58c96fa01d38654f19 jdk-9+99
|
|||||||
bdb0acafc63c42e84d9d8195bf2e2b25ee9c3306 jdk-9+100
|
bdb0acafc63c42e84d9d8195bf2e2b25ee9c3306 jdk-9+100
|
||||||
9f45d3d57d6948cf526fbc2e2891a9a74ac6941a jdk-9+101
|
9f45d3d57d6948cf526fbc2e2891a9a74ac6941a jdk-9+101
|
||||||
d5239fc1b69749ae50793c61b899fcdacf3df857 jdk-9+102
|
d5239fc1b69749ae50793c61b899fcdacf3df857 jdk-9+102
|
||||||
|
c5f55130b1b69510d9a6f4a3105b58e21cd7ffe1 jdk-9+103
|
||||||
|
@ -40,6 +40,8 @@ from mx_unittest import unittest
|
|||||||
|
|
||||||
_suite = mx.suite('jvmci')
|
_suite = mx.suite('jvmci')
|
||||||
|
|
||||||
|
JVMCI_VERSION = 9
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Top level directory of the JDK source workspace.
|
Top level directory of the JDK source workspace.
|
||||||
"""
|
"""
|
||||||
@ -153,11 +155,17 @@ class JvmciJDKDeployedDist(object):
|
|||||||
def deploy(self, jdkDir):
|
def deploy(self, jdkDir):
|
||||||
mx.nyi('deploy', self)
|
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):
|
class ExtJDKDeployedDist(JvmciJDKDeployedDist):
|
||||||
def __init__(self, name):
|
def __init__(self, name):
|
||||||
JvmciJDKDeployedDist.__init__(self, name)
|
JvmciJDKDeployedDist.__init__(self, name)
|
||||||
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
The monolithic JVMCI distribution is deployed through use of -Xbootclasspath/p
|
The monolithic JVMCI distribution is deployed through use of -Xbootclasspath/p
|
||||||
so that it's not necessary to run JDK make after editing JVMCI sources.
|
so that it's not necessary to run JDK make after editing JVMCI sources.
|
||||||
@ -186,7 +194,7 @@ To build hotspot and import it into the JDK: "mx make hotspot import-hotspot"
|
|||||||
# JDK9 must be bootstrapped with a JDK8
|
# JDK9 must be bootstrapped with a JDK8
|
||||||
compliance = mx.JavaCompliance('8')
|
compliance = mx.JavaCompliance('8')
|
||||||
jdk8 = mx.get_jdk(compliance.exactMatch, versionDescription=compliance.value)
|
jdk8 = mx.get_jdk(compliance.exactMatch, versionDescription=compliance.value)
|
||||||
cmd = ['sh', 'configure', '--with-debug-level=' + _vm.debugLevel, '--disable-debug-symbols', '--disable-precompiled-headers',
|
cmd = ['sh', 'configure', '--with-debug-level=' + _vm.debugLevel, '--with-native-debug-symbols=none', '--disable-precompiled-headers',
|
||||||
'--with-jvm-variants=' + _vm.jvmVariant, '--disable-warnings-as-errors', '--with-boot-jdk=' + jdk8.home]
|
'--with-jvm-variants=' + _vm.jvmVariant, '--disable-warnings-as-errors', '--with-boot-jdk=' + jdk8.home]
|
||||||
mx.run(cmd, cwd=_jdkSourceRoot)
|
mx.run(cmd, cwd=_jdkSourceRoot)
|
||||||
cmd = [mx.gmake_cmd(), 'CONF=' + _vm.debugLevel]
|
cmd = [mx.gmake_cmd(), 'CONF=' + _vm.debugLevel]
|
||||||
@ -205,7 +213,15 @@ To build hotspot and import it into the JDK: "mx make hotspot import-hotspot"
|
|||||||
mx.run(cmd, cwd=_jdkSourceRoot)
|
mx.run(cmd, cwd=_jdkSourceRoot)
|
||||||
|
|
||||||
if 'images' in cmd:
|
if 'images' in cmd:
|
||||||
_create_jdk_bundle(jdkBuildDir)
|
jdkImageDir = join(jdkBuildDir, 'images', 'jdk')
|
||||||
|
|
||||||
|
# The OpenJDK build creates an empty cacerts file so copy one from
|
||||||
|
# the default JDK (which is assumed to be an OracleJDK)
|
||||||
|
srcCerts = join(mx.get_jdk(tag='default').home, 'jre', 'lib', 'security', 'cacerts')
|
||||||
|
dstCerts = join(jdkImageDir, 'lib', 'security', 'cacerts')
|
||||||
|
shutil.copyfile(srcCerts, dstCerts)
|
||||||
|
|
||||||
|
_create_jdk_bundle(jdkBuildDir, _vm.debugLevel, jdkImageDir)
|
||||||
|
|
||||||
def _get_jdk_bundle_arches():
|
def _get_jdk_bundle_arches():
|
||||||
"""
|
"""
|
||||||
@ -220,15 +236,14 @@ def _get_jdk_bundle_arches():
|
|||||||
return ['sparcv9']
|
return ['sparcv9']
|
||||||
mx.abort('Unsupported JDK bundle arch: ' + cpu)
|
mx.abort('Unsupported JDK bundle arch: ' + cpu)
|
||||||
|
|
||||||
def _create_jdk_bundle(jdkBuildDir):
|
def _create_jdk_bundle(jdkBuildDir, debugLevel, jdkImageDir):
|
||||||
"""
|
"""
|
||||||
Creates a tar.gz JDK archive, an accompanying tar.gz.sha1 file with its
|
Creates a tar.gz JDK archive, an accompanying tar.gz.sha1 file with its
|
||||||
SHA1 signature plus symlinks to the archive for non-canonical architecture names.
|
SHA1 signature plus symlinks to the archive for non-canonical architecture names.
|
||||||
"""
|
"""
|
||||||
jdkImageDir = join(jdkBuildDir, 'images', 'jdk')
|
|
||||||
|
|
||||||
arches = _get_jdk_bundle_arches()
|
arches = _get_jdk_bundle_arches()
|
||||||
jdkTgzPath = join(_suite.get_output_root(), 'jdk-bundles', 'jdk9-{}-{}.tar.gz'.format(_get_openjdk_os(), arches[0]))
|
jdkTgzPath = join(_suite.get_output_root(), 'jdk-bundles', 'jdk9-{}-{}-{}.tar.gz'.format(debugLevel, _get_openjdk_os(), arches[0]))
|
||||||
with mx.Archiver(jdkTgzPath, kind='tgz') as arc:
|
with mx.Archiver(jdkTgzPath, kind='tgz') as arc:
|
||||||
mx.log('Creating ' + jdkTgzPath)
|
mx.log('Creating ' + jdkTgzPath)
|
||||||
for root, _, filenames in os.walk(jdkImageDir):
|
for root, _, filenames in os.walk(jdkImageDir):
|
||||||
@ -236,10 +251,6 @@ def _create_jdk_bundle(jdkBuildDir):
|
|||||||
f = join(root, name)
|
f = join(root, name)
|
||||||
arcname = 'jdk1.9.0/' + os.path.relpath(f, jdkImageDir)
|
arcname = 'jdk1.9.0/' + os.path.relpath(f, jdkImageDir)
|
||||||
arc.zf.add(name=f, arcname=arcname, recursive=False)
|
arc.zf.add(name=f, arcname=arcname, recursive=False)
|
||||||
# The OpenJDK build creates an empty cacerts file so grab one from
|
|
||||||
# the default JDK which is assumed to be an OracleJDK
|
|
||||||
cacerts = join(mx.get_jdk(tag='default').home, 'jre', 'lib', 'security', 'cacerts')
|
|
||||||
arc.zf.add(name=cacerts, arcname='jdk1.9.0/lib/security/cacerts')
|
|
||||||
|
|
||||||
with open(jdkTgzPath + '.sha1', 'w') as fp:
|
with open(jdkTgzPath + '.sha1', 'w') as fp:
|
||||||
mx.log('Creating ' + jdkTgzPath + '.sha1')
|
mx.log('Creating ' + jdkTgzPath + '.sha1')
|
||||||
@ -252,7 +263,7 @@ def _create_jdk_bundle(jdkBuildDir):
|
|||||||
os.symlink(source, link_name)
|
os.symlink(source, link_name)
|
||||||
|
|
||||||
for arch in arches[1:]:
|
for arch in arches[1:]:
|
||||||
link_name = join(_suite.get_output_root(), 'jdk-bundles', 'jdk9-{}-{}.tar.gz'.format(_get_openjdk_os(), arch))
|
link_name = join(_suite.get_output_root(), 'jdk-bundles', 'jdk9-{}-{}-{}.tar.gz'.format(debugLevel, _get_openjdk_os(), arch))
|
||||||
jdkTgzName = os.path.basename(jdkTgzPath)
|
jdkTgzName = os.path.basename(jdkTgzPath)
|
||||||
_create_link(jdkTgzName, link_name)
|
_create_link(jdkTgzName, link_name)
|
||||||
_create_link(jdkTgzName + '.sha1', link_name + '.sha1')
|
_create_link(jdkTgzName + '.sha1', link_name + '.sha1')
|
||||||
@ -668,15 +679,10 @@ class JVMCIArchiveParticipant:
|
|||||||
|
|
||||||
def __opened__(self, arc, srcArc, services):
|
def __opened__(self, arc, srcArc, services):
|
||||||
self.services = services
|
self.services = services
|
||||||
|
self.jvmciServices = services
|
||||||
self.arc = arc
|
self.arc = arc
|
||||||
|
|
||||||
def __add__(self, arcname, contents):
|
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
|
return False
|
||||||
|
|
||||||
def __addsrc__(self, arcname, contents):
|
def __addsrc__(self, arcname, contents):
|
||||||
@ -757,6 +763,14 @@ class JVMCI9JDKConfig(mx.JDKConfig):
|
|||||||
|
|
||||||
args = ['-Xbootclasspath/p:' + dep.classpath_repr() for dep in _jvmci_bootclasspath_prepends] + args
|
args = ['-Xbootclasspath/p:' + dep.classpath_repr() for dep in _jvmci_bootclasspath_prepends] + args
|
||||||
|
|
||||||
|
# Remove JVMCI jars from class path. They are only necessary when
|
||||||
|
# compiling with a javac from JDK8 or earlier.
|
||||||
|
cpIndex, cp = mx.find_classpath_arg(args)
|
||||||
|
if cp:
|
||||||
|
excluded = frozenset([dist.path for dist in _suite.dists])
|
||||||
|
cp = os.pathsep.join([e for e in cp.split(os.pathsep) if e not in excluded])
|
||||||
|
args[cpIndex] = cp
|
||||||
|
|
||||||
jvmciModeArgs = _jvmciModes[_vm.jvmciMode]
|
jvmciModeArgs = _jvmciModes[_vm.jvmciMode]
|
||||||
if jvmciModeArgs:
|
if jvmciModeArgs:
|
||||||
bcpDeps = [jdkDist.dist() for jdkDist in jdkDeployedDists]
|
bcpDeps = [jdkDist.dist() for jdkDist in jdkDeployedDists]
|
||||||
@ -812,7 +826,7 @@ def get_jvmci_jdk(debugLevel=None):
|
|||||||
_jvmci_jdks[debugLevel] = jdk
|
_jvmci_jdks[debugLevel] = jdk
|
||||||
return jdk
|
return jdk
|
||||||
|
|
||||||
class JVMCIJDKFactory(mx.JDKFactory):
|
class JVMCI9JDKFactory(mx.JDKFactory):
|
||||||
def getJDKConfig(self):
|
def getJDKConfig(self):
|
||||||
jdk = get_jvmci_jdk(_vm.debugLevel)
|
jdk = get_jvmci_jdk(_vm.debugLevel)
|
||||||
return jdk
|
return jdk
|
||||||
@ -836,8 +850,9 @@ mx.add_argument('--jdk-jvm-variant', '--vm', action='store', choices=_jdkJvmVari
|
|||||||
mx.add_argument('--jdk-debug-level', '--vmbuild', action='store', choices=_jdkDebugLevels + sorted(_legacyVmbuilds.viewkeys()), help='the JDK debug level to build/run (default: ' + _vm.debugLevel + ')')
|
mx.add_argument('--jdk-debug-level', '--vmbuild', action='store', choices=_jdkDebugLevels + sorted(_legacyVmbuilds.viewkeys()), help='the JDK debug level to build/run (default: ' + _vm.debugLevel + ')')
|
||||||
mx.add_argument('-I', '--use-jdk-image', action='store_true', help='build/run JDK image instead of exploded JDK')
|
mx.add_argument('-I', '--use-jdk-image', action='store_true', help='build/run JDK image instead of exploded JDK')
|
||||||
|
|
||||||
|
mx.addJDKFactory(_JVMCI_JDK_TAG, mx.JavaCompliance('9'), JVMCI9JDKFactory())
|
||||||
|
|
||||||
def mx_post_parse_cmd_line(opts):
|
def mx_post_parse_cmd_line(opts):
|
||||||
mx.addJDKFactory(_JVMCI_JDK_TAG, mx.JavaCompliance('9'), JVMCIJDKFactory())
|
|
||||||
mx.set_java_command_default_jdk_tag(_JVMCI_JDK_TAG)
|
mx.set_java_command_default_jdk_tag(_JVMCI_JDK_TAG)
|
||||||
|
|
||||||
jdkTag = mx.get_jdk_option().tag
|
jdkTag = mx.get_jdk_option().tag
|
||||||
@ -864,6 +879,39 @@ def mx_post_parse_cmd_line(opts):
|
|||||||
_vm.update(jvmVariant, debugLevel, jvmciMode)
|
_vm.update(jvmVariant, debugLevel, jvmciMode)
|
||||||
|
|
||||||
for jdkDist in jdkDeployedDists:
|
for jdkDist in jdkDeployedDists:
|
||||||
dist = jdkDist.dist()
|
jdkDist.post_parse_cmd_line()
|
||||||
if isinstance(jdkDist, JvmciJDKDeployedDist):
|
|
||||||
dist.set_archiveparticipant(JVMCIArchiveParticipant(dist))
|
def _update_JDK9_STUBS_library():
|
||||||
|
"""
|
||||||
|
Sets the "path" and "sha1" attributes of the "JDK9_STUBS" library.
|
||||||
|
"""
|
||||||
|
jdk9InternalLib = _suite.suiteDict['libraries']['JDK9_STUBS']
|
||||||
|
jarInputDir = join(_suite.get_output_root(), 'jdk9-stubs')
|
||||||
|
jarPath = join(_suite.get_output_root(), 'jdk9-stubs.jar')
|
||||||
|
|
||||||
|
stubs = [
|
||||||
|
('jdk.internal.misc', 'VM', """package jdk.internal.misc;
|
||||||
|
public class VM {
|
||||||
|
public static String getSavedProperty(String key) {
|
||||||
|
throw new InternalError("should not reach here");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
""")
|
||||||
|
]
|
||||||
|
|
||||||
|
if not exists(jarPath):
|
||||||
|
sourceFiles = []
|
||||||
|
for (package, className, source) in stubs:
|
||||||
|
sourceFile = join(jarInputDir, package.replace('.', os.sep), className + '.java')
|
||||||
|
mx.ensure_dir_exists(os.path.dirname(sourceFile))
|
||||||
|
with open(sourceFile, 'w') as fp:
|
||||||
|
fp.write(source)
|
||||||
|
sourceFiles.append(sourceFile)
|
||||||
|
jdk = mx.get_jdk(tag='default')
|
||||||
|
mx.run([jdk.javac, '-d', jarInputDir] + sourceFiles)
|
||||||
|
mx.run([jdk.jar, 'cf', jarPath, '.'], cwd=jarInputDir)
|
||||||
|
|
||||||
|
jdk9InternalLib['path'] = jarPath
|
||||||
|
jdk9InternalLib['sha1'] = mx.sha1OfFile(jarPath)
|
||||||
|
|
||||||
|
_update_JDK9_STUBS_library()
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
suite = {
|
suite = {
|
||||||
"mxversion" : "5.5.12",
|
"mxversion" : "5.6.11",
|
||||||
"name" : "jvmci",
|
"name" : "jvmci",
|
||||||
"url" : "http://openjdk.java.net/projects/graal",
|
"url" : "http://openjdk.java.net/projects/graal",
|
||||||
"developer" : {
|
"developer" : {
|
||||||
@ -24,7 +24,7 @@ suite = {
|
|||||||
|
|
||||||
"defaultLicense" : "GPLv2-CPE",
|
"defaultLicense" : "GPLv2-CPE",
|
||||||
|
|
||||||
# This puts mx/ as a sibiling of the JDK build configuration directories
|
# This puts mx/ as a sibling of the JDK build configuration directories
|
||||||
# (e.g., macosx-x86_64-normal-server-release).
|
# (e.g., macosx-x86_64-normal-server-release).
|
||||||
"outputRoot" : "../build/mx/hotspot",
|
"outputRoot" : "../build/mx/hotspot",
|
||||||
|
|
||||||
@ -32,8 +32,6 @@ suite = {
|
|||||||
|
|
||||||
"libraries" : {
|
"libraries" : {
|
||||||
|
|
||||||
# ------------- Libraries -------------
|
|
||||||
|
|
||||||
"HCFDIS" : {
|
"HCFDIS" : {
|
||||||
"urls" : ["https://lafo.ssw.uni-linz.ac.at/pub/hcfdis-3.jar"],
|
"urls" : ["https://lafo.ssw.uni-linz.ac.at/pub/hcfdis-3.jar"],
|
||||||
"sha1" : "a71247c6ddb90aad4abf7c77e501acc60674ef57",
|
"sha1" : "a71247c6ddb90aad4abf7c77e501acc60674ef57",
|
||||||
@ -53,34 +51,32 @@ suite = {
|
|||||||
"sha1" : "122b87ca88e41a415cf8b523fd3d03b4325134a3",
|
"sha1" : "122b87ca88e41a415cf8b523fd3d03b4325134a3",
|
||||||
"urls" : ["https://lafo.ssw.uni-linz.ac.at/pub/graal-external-deps/batik-all-1.7.jar"],
|
"urls" : ["https://lafo.ssw.uni-linz.ac.at/pub/graal-external-deps/batik-all-1.7.jar"],
|
||||||
},
|
},
|
||||||
|
|
||||||
|
# Stubs for classes introduced in JDK9 that allow compilation with a JDK8 javac and Eclipse.
|
||||||
|
# The "path" and "sha1" attributes are added when mx_jvmci is loaded
|
||||||
|
# (see mx_jvmci._update_JDK9_STUBS_library()).
|
||||||
|
"JDK9_STUBS" : {
|
||||||
|
"license" : "GPLv2-CPE",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
"projects" : {
|
"projects" : {
|
||||||
|
|
||||||
# ------------- JVMCI:Service -------------
|
# ------------- JVMCI:Service -------------
|
||||||
|
|
||||||
"jdk.vm.ci.service" : {
|
"jdk.vm.ci.services" : {
|
||||||
"subDir" : "src/jdk.vm.ci/share/classes",
|
"subDir" : "src/jdk.vm.ci/share/classes",
|
||||||
"sourceDirs" : ["src"],
|
"sourceDirs" : ["src"],
|
||||||
"javaCompliance" : "1.8",
|
"javaCompliance" : "1.8",
|
||||||
"workingSets" : "API,JVMCI",
|
"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 -------------
|
# ------------- JVMCI:API -------------
|
||||||
|
|
||||||
"jdk.vm.ci.common" : {
|
"jdk.vm.ci.common" : {
|
||||||
"subDir" : "src/jdk.vm.ci/share/classes",
|
"subDir" : "src/jdk.vm.ci/share/classes",
|
||||||
"sourceDirs" : ["src"],
|
"sourceDirs" : ["src"],
|
||||||
"checkstyle" : "jdk.vm.ci.service",
|
"checkstyle" : "jdk.vm.ci.services",
|
||||||
"javaCompliance" : "1.8",
|
"javaCompliance" : "1.8",
|
||||||
"workingSets" : "API,JVMCI",
|
"workingSets" : "API,JVMCI",
|
||||||
},
|
},
|
||||||
@ -88,7 +84,7 @@ suite = {
|
|||||||
"jdk.vm.ci.meta" : {
|
"jdk.vm.ci.meta" : {
|
||||||
"subDir" : "src/jdk.vm.ci/share/classes",
|
"subDir" : "src/jdk.vm.ci/share/classes",
|
||||||
"sourceDirs" : ["src"],
|
"sourceDirs" : ["src"],
|
||||||
"checkstyle" : "jdk.vm.ci.service",
|
"checkstyle" : "jdk.vm.ci.services",
|
||||||
"javaCompliance" : "1.8",
|
"javaCompliance" : "1.8",
|
||||||
"workingSets" : "API,JVMCI",
|
"workingSets" : "API,JVMCI",
|
||||||
},
|
},
|
||||||
@ -97,7 +93,7 @@ suite = {
|
|||||||
"subDir" : "src/jdk.vm.ci/share/classes",
|
"subDir" : "src/jdk.vm.ci/share/classes",
|
||||||
"sourceDirs" : ["src"],
|
"sourceDirs" : ["src"],
|
||||||
"dependencies" : ["jdk.vm.ci.meta"],
|
"dependencies" : ["jdk.vm.ci.meta"],
|
||||||
"checkstyle" : "jdk.vm.ci.service",
|
"checkstyle" : "jdk.vm.ci.services",
|
||||||
"javaCompliance" : "1.8",
|
"javaCompliance" : "1.8",
|
||||||
"workingSets" : "API,JVMCI",
|
"workingSets" : "API,JVMCI",
|
||||||
},
|
},
|
||||||
@ -108,7 +104,7 @@ suite = {
|
|||||||
"dependencies" : [
|
"dependencies" : [
|
||||||
"jdk.vm.ci.code",
|
"jdk.vm.ci.code",
|
||||||
],
|
],
|
||||||
"checkstyle" : "jdk.vm.ci.service",
|
"checkstyle" : "jdk.vm.ci.services",
|
||||||
"javaCompliance" : "1.8",
|
"javaCompliance" : "1.8",
|
||||||
"workingSets" : "API,JVMCI",
|
"workingSets" : "API,JVMCI",
|
||||||
},
|
},
|
||||||
@ -121,7 +117,7 @@ suite = {
|
|||||||
"jdk.vm.ci.common",
|
"jdk.vm.ci.common",
|
||||||
"jdk.vm.ci.runtime",
|
"jdk.vm.ci.runtime",
|
||||||
],
|
],
|
||||||
"checkstyle" : "jdk.vm.ci.service",
|
"checkstyle" : "jdk.vm.ci.services",
|
||||||
"javaCompliance" : "1.8",
|
"javaCompliance" : "1.8",
|
||||||
"workingSets" : "API,JVMCI",
|
"workingSets" : "API,JVMCI",
|
||||||
},
|
},
|
||||||
@ -129,7 +125,7 @@ suite = {
|
|||||||
"jdk.vm.ci.inittimer" : {
|
"jdk.vm.ci.inittimer" : {
|
||||||
"subDir" : "src/jdk.vm.ci/share/classes",
|
"subDir" : "src/jdk.vm.ci/share/classes",
|
||||||
"sourceDirs" : ["src"],
|
"sourceDirs" : ["src"],
|
||||||
"checkstyle" : "jdk.vm.ci.service",
|
"checkstyle" : "jdk.vm.ci.services",
|
||||||
"javaCompliance" : "1.8",
|
"javaCompliance" : "1.8",
|
||||||
"workingSets" : "JVMCI",
|
"workingSets" : "JVMCI",
|
||||||
},
|
},
|
||||||
@ -140,7 +136,7 @@ suite = {
|
|||||||
"subDir" : "src/jdk.vm.ci/share/classes",
|
"subDir" : "src/jdk.vm.ci/share/classes",
|
||||||
"sourceDirs" : ["src"],
|
"sourceDirs" : ["src"],
|
||||||
"dependencies" : ["jdk.vm.ci.code"],
|
"dependencies" : ["jdk.vm.ci.code"],
|
||||||
"checkstyle" : "jdk.vm.ci.service",
|
"checkstyle" : "jdk.vm.ci.services",
|
||||||
"javaCompliance" : "1.8",
|
"javaCompliance" : "1.8",
|
||||||
"workingSets" : "JVMCI,AArch64",
|
"workingSets" : "JVMCI,AArch64",
|
||||||
},
|
},
|
||||||
@ -149,7 +145,7 @@ suite = {
|
|||||||
"subDir" : "src/jdk.vm.ci/share/classes",
|
"subDir" : "src/jdk.vm.ci/share/classes",
|
||||||
"sourceDirs" : ["src"],
|
"sourceDirs" : ["src"],
|
||||||
"dependencies" : ["jdk.vm.ci.code"],
|
"dependencies" : ["jdk.vm.ci.code"],
|
||||||
"checkstyle" : "jdk.vm.ci.service",
|
"checkstyle" : "jdk.vm.ci.services",
|
||||||
"javaCompliance" : "1.8",
|
"javaCompliance" : "1.8",
|
||||||
"workingSets" : "JVMCI,AMD64",
|
"workingSets" : "JVMCI,AMD64",
|
||||||
},
|
},
|
||||||
@ -158,7 +154,7 @@ suite = {
|
|||||||
"subDir" : "src/jdk.vm.ci/share/classes",
|
"subDir" : "src/jdk.vm.ci/share/classes",
|
||||||
"sourceDirs" : ["src"],
|
"sourceDirs" : ["src"],
|
||||||
"dependencies" : ["jdk.vm.ci.code"],
|
"dependencies" : ["jdk.vm.ci.code"],
|
||||||
"checkstyle" : "jdk.vm.ci.service",
|
"checkstyle" : "jdk.vm.ci.services",
|
||||||
"javaCompliance" : "1.8",
|
"javaCompliance" : "1.8",
|
||||||
"workingSets" : "JVMCI,SPARC",
|
"workingSets" : "JVMCI,SPARC",
|
||||||
},
|
},
|
||||||
@ -171,9 +167,10 @@ suite = {
|
|||||||
"jdk.vm.ci.common",
|
"jdk.vm.ci.common",
|
||||||
"jdk.vm.ci.inittimer",
|
"jdk.vm.ci.inittimer",
|
||||||
"jdk.vm.ci.runtime",
|
"jdk.vm.ci.runtime",
|
||||||
"jdk.vm.ci.service",
|
"jdk.vm.ci.services",
|
||||||
|
"JDK9_STUBS",
|
||||||
],
|
],
|
||||||
"checkstyle" : "jdk.vm.ci.service",
|
"checkstyle" : "jdk.vm.ci.services",
|
||||||
"javaCompliance" : "1.8",
|
"javaCompliance" : "1.8",
|
||||||
"workingSets" : "JVMCI",
|
"workingSets" : "JVMCI",
|
||||||
},
|
},
|
||||||
@ -181,7 +178,7 @@ suite = {
|
|||||||
"jdk.vm.ci.hotspotvmconfig" : {
|
"jdk.vm.ci.hotspotvmconfig" : {
|
||||||
"subDir" : "src/jdk.vm.ci/share/classes",
|
"subDir" : "src/jdk.vm.ci/share/classes",
|
||||||
"sourceDirs" : ["src"],
|
"sourceDirs" : ["src"],
|
||||||
"checkstyle" : "jdk.vm.ci.service",
|
"checkstyle" : "jdk.vm.ci.services",
|
||||||
"javaCompliance" : "1.8",
|
"javaCompliance" : "1.8",
|
||||||
"workingSets" : "JVMCI,HotSpot",
|
"workingSets" : "JVMCI,HotSpot",
|
||||||
},
|
},
|
||||||
@ -193,10 +190,7 @@ suite = {
|
|||||||
"jdk.vm.ci.aarch64",
|
"jdk.vm.ci.aarch64",
|
||||||
"jdk.vm.ci.hotspot",
|
"jdk.vm.ci.hotspot",
|
||||||
],
|
],
|
||||||
"checkstyle" : "jdk.vm.ci.service",
|
"checkstyle" : "jdk.vm.ci.services",
|
||||||
"annotationProcessors" : [
|
|
||||||
"JVMCI_SERVICE_PROCESSOR",
|
|
||||||
],
|
|
||||||
"javaCompliance" : "1.8",
|
"javaCompliance" : "1.8",
|
||||||
"workingSets" : "JVMCI,HotSpot,AArch64",
|
"workingSets" : "JVMCI,HotSpot,AArch64",
|
||||||
},
|
},
|
||||||
@ -208,10 +202,7 @@ suite = {
|
|||||||
"jdk.vm.ci.amd64",
|
"jdk.vm.ci.amd64",
|
||||||
"jdk.vm.ci.hotspot",
|
"jdk.vm.ci.hotspot",
|
||||||
],
|
],
|
||||||
"checkstyle" : "jdk.vm.ci.service",
|
"checkstyle" : "jdk.vm.ci.services",
|
||||||
"annotationProcessors" : [
|
|
||||||
"JVMCI_SERVICE_PROCESSOR",
|
|
||||||
],
|
|
||||||
"javaCompliance" : "1.8",
|
"javaCompliance" : "1.8",
|
||||||
"workingSets" : "JVMCI,HotSpot,AMD64",
|
"workingSets" : "JVMCI,HotSpot,AMD64",
|
||||||
},
|
},
|
||||||
@ -223,10 +214,7 @@ suite = {
|
|||||||
"jdk.vm.ci.sparc",
|
"jdk.vm.ci.sparc",
|
||||||
"jdk.vm.ci.hotspot",
|
"jdk.vm.ci.hotspot",
|
||||||
],
|
],
|
||||||
"checkstyle" : "jdk.vm.ci.service",
|
"checkstyle" : "jdk.vm.ci.services",
|
||||||
"annotationProcessors" : [
|
|
||||||
"JVMCI_SERVICE_PROCESSOR",
|
|
||||||
],
|
|
||||||
"javaCompliance" : "1.8",
|
"javaCompliance" : "1.8",
|
||||||
"workingSets" : "JVMCI,HotSpot,SPARC",
|
"workingSets" : "JVMCI,HotSpot,SPARC",
|
||||||
},
|
},
|
||||||
@ -241,9 +229,9 @@ suite = {
|
|||||||
|
|
||||||
# ------------- Distributions -------------
|
# ------------- Distributions -------------
|
||||||
|
|
||||||
"JVMCI_SERVICE" : {
|
"JVMCI_SERVICES" : {
|
||||||
"subDir" : "src/jdk.vm.ci/share/classes",
|
"subDir" : "src/jdk.vm.ci/share/classes",
|
||||||
"dependencies" : ["jdk.vm.ci.service"],
|
"dependencies" : ["jdk.vm.ci.services"],
|
||||||
},
|
},
|
||||||
|
|
||||||
"JVMCI_API" : {
|
"JVMCI_API" : {
|
||||||
@ -257,7 +245,7 @@ suite = {
|
|||||||
"jdk.vm.ci.sparc",
|
"jdk.vm.ci.sparc",
|
||||||
],
|
],
|
||||||
"distDependencies" : [
|
"distDependencies" : [
|
||||||
"JVMCI_SERVICE",
|
"JVMCI_SERVICES",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -277,7 +265,7 @@ suite = {
|
|||||||
],
|
],
|
||||||
"distDependencies" : [
|
"distDependencies" : [
|
||||||
"JVMCI_HOTSPOTVMCONFIG",
|
"JVMCI_HOTSPOTVMCONFIG",
|
||||||
"JVMCI_SERVICE",
|
"JVMCI_SERVICES",
|
||||||
"JVMCI_API",
|
"JVMCI_API",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
@ -293,28 +281,18 @@ suite = {
|
|||||||
"exclude" : ["mx:JUNIT"],
|
"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
|
# This exists to have a monolithic jvmci.jar file which simplifies
|
||||||
# using the -Xoverride option in JDK9.
|
# using the -Xoverride option in JDK9.
|
||||||
"JVMCI" : {
|
"JVMCI" : {
|
||||||
"subDir" : "src/jdk.vm.ci/share/classes",
|
"subDir" : "src/jdk.vm.ci/share/classes",
|
||||||
"overlaps" : [
|
"overlaps" : [
|
||||||
"JVMCI_API",
|
"JVMCI_API",
|
||||||
"JVMCI_SERVICE",
|
"JVMCI_SERVICES",
|
||||||
"JVMCI_HOTSPOT",
|
"JVMCI_HOTSPOT",
|
||||||
"JVMCI_HOTSPOTVMCONFIG",
|
"JVMCI_HOTSPOTVMCONFIG",
|
||||||
"JVMCI_SERVICE_PROCESSOR",
|
|
||||||
],
|
],
|
||||||
"dependencies" : [
|
"dependencies" : [
|
||||||
"jdk.vm.ci.service",
|
"jdk.vm.ci.services",
|
||||||
"jdk.vm.ci.inittimer",
|
"jdk.vm.ci.inittimer",
|
||||||
"jdk.vm.ci.runtime",
|
"jdk.vm.ci.runtime",
|
||||||
"jdk.vm.ci.common",
|
"jdk.vm.ci.common",
|
||||||
@ -325,8 +303,8 @@ suite = {
|
|||||||
"jdk.vm.ci.hotspot.aarch64",
|
"jdk.vm.ci.hotspot.aarch64",
|
||||||
"jdk.vm.ci.hotspot.amd64",
|
"jdk.vm.ci.hotspot.amd64",
|
||||||
"jdk.vm.ci.hotspot.sparc",
|
"jdk.vm.ci.hotspot.sparc",
|
||||||
"jdk.vm.ci.service.processor"
|
|
||||||
],
|
],
|
||||||
|
"exclude" : ["JDK9_STUBS"]
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
# Copyright 2012, 2015 SAP AG. All rights reserved.
|
# Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
# Copyright 2012, 2013 SAP AG. All rights reserved.
|
# Copyright (c) 2012, 2013 SAP SE. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
# Copyright 2012, 2013 SAP AG. All rights reserved.
|
# Copyright (c) 2012, 2013 SAP SE. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
# Copyright 2012, 2013 SAP AG. All rights reserved.
|
# Copyright (c) 2012, 2013 SAP SE. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2006, 2015, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 2006, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
# Copyright 2012, 2013 SAP AG. All rights reserved.
|
# Copyright (c) 2012, 2013 SAP SE. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
# Copyright 2012, 2013 SAP AG. All rights reserved.
|
# Copyright (c) 2012, 2013 SAP SE. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
# Copyright 2012, 2013 SAP AG. All rights reserved.
|
# Copyright (c) 2012, 2013 SAP SE. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
# Copyright 2012, 2013 SAP AG. All rights reserved.
|
# Copyright (c) 2012, 2013 SAP SE. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
# Copyright 2012, 2015 SAP AG. All rights reserved.
|
# Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
# Copyright 2012, 2013 SAP AG. All rights reserved.
|
# Copyright (c) 2012, 2013 SAP SE. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2006, 2015, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 2006, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
# Copyright 2012, 2015 SAP AG. All rights reserved.
|
# Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
# Copyright 2012, 2013 SAP AG. All rights reserved.
|
# Copyright (c) 2012, 2013 SAP SE. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
# Copyright (c) 2012, 2015 SAP. All rights reserved.
|
# Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -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
|
|
@ -1,6 +1,6 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
# Copyright 2012, 2013 SAP AG. All rights reserved.
|
# Copyright (c) 2012, 2013 SAP SE. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
JVM_Clone;
|
JVM_Clone;
|
||||||
JVM_ConstantPoolGetClassAt;
|
JVM_ConstantPoolGetClassAt;
|
||||||
JVM_ConstantPoolGetClassAtIfLoaded;
|
JVM_ConstantPoolGetClassAtIfLoaded;
|
||||||
|
JVM_ConstantPoolGetClassRefIndexAt;
|
||||||
JVM_ConstantPoolGetDoubleAt;
|
JVM_ConstantPoolGetDoubleAt;
|
||||||
JVM_ConstantPoolGetFieldAt;
|
JVM_ConstantPoolGetFieldAt;
|
||||||
JVM_ConstantPoolGetFieldAtIfLoaded;
|
JVM_ConstantPoolGetFieldAtIfLoaded;
|
||||||
@ -22,8 +23,11 @@
|
|||||||
JVM_ConstantPoolGetMethodAt;
|
JVM_ConstantPoolGetMethodAt;
|
||||||
JVM_ConstantPoolGetMethodAtIfLoaded;
|
JVM_ConstantPoolGetMethodAtIfLoaded;
|
||||||
JVM_ConstantPoolGetMemberRefInfoAt;
|
JVM_ConstantPoolGetMemberRefInfoAt;
|
||||||
|
JVM_ConstantPoolGetNameAndTypeRefInfoAt;
|
||||||
|
JVM_ConstantPoolGetNameAndTypeRefIndexAt;
|
||||||
JVM_ConstantPoolGetSize;
|
JVM_ConstantPoolGetSize;
|
||||||
JVM_ConstantPoolGetStringAt;
|
JVM_ConstantPoolGetStringAt;
|
||||||
|
JVM_ConstantPoolGetTagAt;
|
||||||
JVM_ConstantPoolGetUTF8At;
|
JVM_ConstantPoolGetUTF8At;
|
||||||
JVM_CountStackFrames;
|
JVM_CountStackFrames;
|
||||||
JVM_CurrentClassLoader;
|
JVM_CurrentClassLoader;
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -256,6 +256,7 @@ void PatchingStub::emit_code(LIR_Assembler* ce) {
|
|||||||
|
|
||||||
void DeoptimizeStub::emit_code(LIR_Assembler* ce) {
|
void DeoptimizeStub::emit_code(LIR_Assembler* ce) {
|
||||||
__ bind(_entry);
|
__ bind(_entry);
|
||||||
|
ce->store_parameter(_trap_request, 0);
|
||||||
__ far_call(RuntimeAddress(Runtime1::entry_for(Runtime1::deoptimize_id)));
|
__ far_call(RuntimeAddress(Runtime1::entry_for(Runtime1::deoptimize_id)));
|
||||||
ce->add_call_info_here(_info);
|
ce->add_call_info_here(_info);
|
||||||
DEBUG_ONLY(__ should_not_reach_here());
|
DEBUG_ONLY(__ should_not_reach_here());
|
||||||
|
@ -3169,7 +3169,8 @@ void LIR_Assembler::atomic_op(LIR_Code code, LIR_Opr src, LIR_Opr data, LIR_Opr
|
|||||||
Register obj = as_reg(data);
|
Register obj = as_reg(data);
|
||||||
Register dst = as_reg(dest);
|
Register dst = as_reg(dest);
|
||||||
if (is_oop && UseCompressedOops) {
|
if (is_oop && UseCompressedOops) {
|
||||||
__ encode_heap_oop(obj);
|
__ encode_heap_oop(rscratch1, obj);
|
||||||
|
obj = rscratch1;
|
||||||
}
|
}
|
||||||
assert_different_registers(obj, addr.base(), tmp, rscratch2, dst);
|
assert_different_registers(obj, addr.base(), tmp, rscratch2, dst);
|
||||||
Label again;
|
Label again;
|
||||||
|
@ -1066,7 +1066,9 @@ OopMapSet* Runtime1::generate_code_for(StubID id, StubAssembler* sasm) {
|
|||||||
{
|
{
|
||||||
StubFrame f(sasm, "deoptimize", dont_gc_arguments);
|
StubFrame f(sasm, "deoptimize", dont_gc_arguments);
|
||||||
OopMap* oop_map = save_live_registers(sasm);
|
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 = new OopMapSet();
|
||||||
oop_maps->add_gc_map(call_offset, oop_map);
|
oop_maps->add_gc_map(call_offset, oop_map);
|
||||||
restore_live_registers(sasm);
|
restore_live_registers(sasm);
|
||||||
@ -1148,9 +1150,6 @@ OopMapSet* Runtime1::generate_code_for(StubID id, StubAssembler* sasm) {
|
|||||||
|
|
||||||
#if INCLUDE_ALL_GCS
|
#if INCLUDE_ALL_GCS
|
||||||
|
|
||||||
// Registers to be saved around calls to g1_wb_pre or g1_wb_post
|
|
||||||
#define G1_SAVE_REGS (RegSet::range(r0, r18) - RegSet::of(rscratch1, rscratch2))
|
|
||||||
|
|
||||||
case g1_pre_barrier_slow_id:
|
case g1_pre_barrier_slow_id:
|
||||||
{
|
{
|
||||||
StubFrame f(sasm, "g1_pre_barrier", dont_gc_arguments);
|
StubFrame f(sasm, "g1_pre_barrier", dont_gc_arguments);
|
||||||
@ -1192,10 +1191,10 @@ OopMapSet* Runtime1::generate_code_for(StubID id, StubAssembler* sasm) {
|
|||||||
__ b(done);
|
__ b(done);
|
||||||
|
|
||||||
__ bind(runtime);
|
__ bind(runtime);
|
||||||
__ push(G1_SAVE_REGS, sp);
|
__ push_call_clobbered_registers();
|
||||||
f.load_argument(0, pre_val);
|
f.load_argument(0, pre_val);
|
||||||
__ call_VM_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::g1_wb_pre), pre_val, thread);
|
__ call_VM_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::g1_wb_pre), pre_val, thread);
|
||||||
__ pop(G1_SAVE_REGS, sp);
|
__ pop_call_clobbered_registers();
|
||||||
__ bind(done);
|
__ bind(done);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -1223,45 +1222,49 @@ OopMapSet* Runtime1::generate_code_for(StubID id, StubAssembler* sasm) {
|
|||||||
Address buffer(thread, in_bytes(JavaThread::dirty_card_queue_offset() +
|
Address buffer(thread, in_bytes(JavaThread::dirty_card_queue_offset() +
|
||||||
DirtyCardQueue::byte_offset_of_buf()));
|
DirtyCardQueue::byte_offset_of_buf()));
|
||||||
|
|
||||||
const Register card_addr = rscratch2;
|
const Register card_offset = rscratch2;
|
||||||
ExternalAddress cardtable((address) ct->byte_map_base);
|
// LR is free here, so we can use it to hold the byte_map_base.
|
||||||
|
const Register byte_map_base = lr;
|
||||||
|
|
||||||
f.load_argument(0, card_addr);
|
assert_different_registers(card_offset, byte_map_base, rscratch1);
|
||||||
__ lsr(card_addr, card_addr, CardTableModRefBS::card_shift);
|
|
||||||
unsigned long offset;
|
f.load_argument(0, card_offset);
|
||||||
__ adrp(rscratch1, cardtable, offset);
|
__ lsr(card_offset, card_offset, CardTableModRefBS::card_shift);
|
||||||
__ add(card_addr, card_addr, rscratch1);
|
__ load_byte_map_base(byte_map_base);
|
||||||
__ ldrb(rscratch1, Address(card_addr, offset));
|
__ ldrb(rscratch1, Address(byte_map_base, card_offset));
|
||||||
__ cmpw(rscratch1, (int)G1SATBCardTableModRefBS::g1_young_card_val());
|
__ cmpw(rscratch1, (int)G1SATBCardTableModRefBS::g1_young_card_val());
|
||||||
__ br(Assembler::EQ, done);
|
__ br(Assembler::EQ, done);
|
||||||
|
|
||||||
assert((int)CardTableModRefBS::dirty_card_val() == 0, "must be 0");
|
assert((int)CardTableModRefBS::dirty_card_val() == 0, "must be 0");
|
||||||
|
|
||||||
__ membar(Assembler::StoreLoad);
|
__ membar(Assembler::StoreLoad);
|
||||||
__ ldrb(rscratch1, Address(card_addr, offset));
|
__ ldrb(rscratch1, Address(byte_map_base, card_offset));
|
||||||
__ cbzw(rscratch1, done);
|
__ cbzw(rscratch1, done);
|
||||||
|
|
||||||
// storing region crossing non-NULL, card is clean.
|
// storing region crossing non-NULL, card is clean.
|
||||||
// dirty card and log.
|
// dirty card and log.
|
||||||
__ strb(zr, Address(card_addr, offset));
|
__ strb(zr, Address(byte_map_base, card_offset));
|
||||||
|
|
||||||
|
// Convert card offset into an address in card_addr
|
||||||
|
Register card_addr = card_offset;
|
||||||
|
__ add(card_addr, byte_map_base, card_addr);
|
||||||
|
|
||||||
__ ldr(rscratch1, queue_index);
|
__ ldr(rscratch1, queue_index);
|
||||||
__ cbz(rscratch1, runtime);
|
__ cbz(rscratch1, runtime);
|
||||||
__ sub(rscratch1, rscratch1, wordSize);
|
__ sub(rscratch1, rscratch1, wordSize);
|
||||||
__ str(rscratch1, queue_index);
|
__ str(rscratch1, queue_index);
|
||||||
|
|
||||||
const Register buffer_addr = r0;
|
// Reuse LR to hold buffer_addr
|
||||||
|
const Register buffer_addr = lr;
|
||||||
|
|
||||||
__ push(RegSet::of(r0, r1), sp);
|
|
||||||
__ ldr(buffer_addr, buffer);
|
__ ldr(buffer_addr, buffer);
|
||||||
__ str(card_addr, Address(buffer_addr, rscratch1));
|
__ str(card_addr, Address(buffer_addr, rscratch1));
|
||||||
__ pop(RegSet::of(r0, r1), sp);
|
|
||||||
__ b(done);
|
__ b(done);
|
||||||
|
|
||||||
__ bind(runtime);
|
__ bind(runtime);
|
||||||
__ push(G1_SAVE_REGS, sp);
|
__ push_call_clobbered_registers();
|
||||||
__ call_VM_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::g1_wb_post), card_addr, thread);
|
__ call_VM_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::g1_wb_post), card_addr, thread);
|
||||||
__ pop(G1_SAVE_REGS, sp);
|
__ pop_call_clobbered_registers();
|
||||||
__ bind(done);
|
__ bind(done);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2296,6 +2296,30 @@ void MacroAssembler::c_stub_prolog(int gp_arg_count, int fp_arg_count, int ret_t
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void MacroAssembler::push_call_clobbered_registers() {
|
||||||
|
push(RegSet::range(r0, r18) - RegSet::of(rscratch1, rscratch2), sp);
|
||||||
|
|
||||||
|
// Push v0-v7, v16-v31.
|
||||||
|
for (int i = 30; i >= 0; i -= 2) {
|
||||||
|
if (i <= v7->encoding() || i >= v16->encoding()) {
|
||||||
|
stpd(as_FloatRegister(i), as_FloatRegister(i+1),
|
||||||
|
Address(pre(sp, -2 * wordSize)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MacroAssembler::pop_call_clobbered_registers() {
|
||||||
|
|
||||||
|
for (int i = 0; i < 32; i += 2) {
|
||||||
|
if (i <= v7->encoding() || i >= v16->encoding()) {
|
||||||
|
ldpd(as_FloatRegister(i), as_FloatRegister(i+1),
|
||||||
|
Address(post(sp, 2 * wordSize)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pop(RegSet::range(r0, r18) - RegSet::of(rscratch1, rscratch2), sp);
|
||||||
|
}
|
||||||
|
|
||||||
void MacroAssembler::push_CPU_state(bool save_vectors) {
|
void MacroAssembler::push_CPU_state(bool save_vectors) {
|
||||||
push(0x3fffffff, sp); // integer registers except lr & sp
|
push(0x3fffffff, sp); // integer registers except lr & sp
|
||||||
|
|
||||||
@ -3094,12 +3118,7 @@ void MacroAssembler::store_check(Register obj) {
|
|||||||
|
|
||||||
assert(CardTableModRefBS::dirty_card_val() == 0, "must be");
|
assert(CardTableModRefBS::dirty_card_val() == 0, "must be");
|
||||||
|
|
||||||
{
|
load_byte_map_base(rscratch1);
|
||||||
ExternalAddress cardtable((address) ct->byte_map_base);
|
|
||||||
unsigned long offset;
|
|
||||||
adrp(rscratch1, cardtable, offset);
|
|
||||||
assert(offset == 0, "byte_map_base is misaligned");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (UseCondCardMark) {
|
if (UseCondCardMark) {
|
||||||
Label L_already_dirty;
|
Label L_already_dirty;
|
||||||
@ -3591,12 +3610,10 @@ void MacroAssembler::g1_write_barrier_post(Register store_addr,
|
|||||||
|
|
||||||
lsr(card_addr, store_addr, CardTableModRefBS::card_shift);
|
lsr(card_addr, store_addr, CardTableModRefBS::card_shift);
|
||||||
|
|
||||||
unsigned long offset;
|
|
||||||
adrp(tmp2, cardtable, offset);
|
|
||||||
|
|
||||||
// get the address of the card
|
// get the address of the card
|
||||||
|
load_byte_map_base(tmp2);
|
||||||
add(card_addr, card_addr, tmp2);
|
add(card_addr, card_addr, tmp2);
|
||||||
ldrb(tmp2, Address(card_addr, offset));
|
ldrb(tmp2, Address(card_addr));
|
||||||
cmpw(tmp2, (int)G1SATBCardTableModRefBS::g1_young_card_val());
|
cmpw(tmp2, (int)G1SATBCardTableModRefBS::g1_young_card_val());
|
||||||
br(Assembler::EQ, done);
|
br(Assembler::EQ, done);
|
||||||
|
|
||||||
@ -3604,13 +3621,13 @@ void MacroAssembler::g1_write_barrier_post(Register store_addr,
|
|||||||
|
|
||||||
membar(Assembler::StoreLoad);
|
membar(Assembler::StoreLoad);
|
||||||
|
|
||||||
ldrb(tmp2, Address(card_addr, offset));
|
ldrb(tmp2, Address(card_addr));
|
||||||
cbzw(tmp2, done);
|
cbzw(tmp2, done);
|
||||||
|
|
||||||
// storing a region crossing, non-NULL oop, card is clean.
|
// storing a region crossing, non-NULL oop, card is clean.
|
||||||
// dirty card and log.
|
// dirty card and log.
|
||||||
|
|
||||||
strb(zr, Address(card_addr, offset));
|
strb(zr, Address(card_addr));
|
||||||
|
|
||||||
ldr(rscratch1, queue_index);
|
ldr(rscratch1, queue_index);
|
||||||
cbz(rscratch1, runtime);
|
cbz(rscratch1, runtime);
|
||||||
@ -3933,7 +3950,7 @@ void MacroAssembler::bang_stack_size(Register size, Register tmp) {
|
|||||||
// was post-decremented.) Skip this address by starting at i=1, and
|
// 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
|
// touch a few more pages below. N.B. It is important to touch all
|
||||||
// the way down to and including i=StackShadowPages.
|
// 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
|
// this could be any sized move but this is can be a debugging crumb
|
||||||
// so the bigger the better.
|
// so the bigger the better.
|
||||||
lea(tmp, Address(tmp, -os::vm_page_size()));
|
lea(tmp, Address(tmp, -os::vm_page_size()));
|
||||||
@ -3966,6 +3983,9 @@ void MacroAssembler::adrp(Register reg1, const Address &dest, unsigned long &byt
|
|||||||
long offset_low = dest_page - low_page;
|
long offset_low = dest_page - low_page;
|
||||||
long offset_high = dest_page - high_page;
|
long offset_high = dest_page - high_page;
|
||||||
|
|
||||||
|
assert(is_valid_AArch64_address(dest.target()), "bad address");
|
||||||
|
assert(dest.getMode() == Address::literal, "ADRP must be applied to a literal address");
|
||||||
|
|
||||||
InstructionMark im(this);
|
InstructionMark im(this);
|
||||||
code_section()->relocate(inst_mark(), dest.rspec());
|
code_section()->relocate(inst_mark(), dest.rspec());
|
||||||
// 8143067: Ensure that the adrp can reach the dest from anywhere within
|
// 8143067: Ensure that the adrp can reach the dest from anywhere within
|
||||||
@ -3977,11 +3997,26 @@ void MacroAssembler::adrp(Register reg1, const Address &dest, unsigned long &byt
|
|||||||
long offset = dest_page - pc_page;
|
long offset = dest_page - pc_page;
|
||||||
offset = (offset & ((1<<20)-1)) << 12;
|
offset = (offset & ((1<<20)-1)) << 12;
|
||||||
_adrp(reg1, pc()+offset);
|
_adrp(reg1, pc()+offset);
|
||||||
movk(reg1, ((unsigned long)dest.target() >> 32) & 0xffff, 32);
|
movk(reg1, (unsigned long)dest.target() >> 32, 32);
|
||||||
}
|
}
|
||||||
byte_offset = (unsigned long)dest.target() & 0xfff;
|
byte_offset = (unsigned long)dest.target() & 0xfff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MacroAssembler::load_byte_map_base(Register reg) {
|
||||||
|
jbyte *byte_map_base =
|
||||||
|
((CardTableModRefBS*)(Universe::heap()->barrier_set()))->byte_map_base;
|
||||||
|
|
||||||
|
if (is_valid_AArch64_address((address)byte_map_base)) {
|
||||||
|
// Strictly speaking the byte_map_base isn't an address at all,
|
||||||
|
// and it might even be negative.
|
||||||
|
unsigned long offset;
|
||||||
|
adrp(reg, ExternalAddress((address)byte_map_base), offset);
|
||||||
|
assert(offset == 0, "misaligned card table base");
|
||||||
|
} else {
|
||||||
|
mov(reg, (uint64_t)byte_map_base);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void MacroAssembler::build_frame(int framesize) {
|
void MacroAssembler::build_frame(int framesize) {
|
||||||
assert(framesize > 0, "framesize must be > 0");
|
assert(framesize > 0, "framesize must be > 0");
|
||||||
if (framesize < ((1 << 9) + 2 * wordSize)) {
|
if (framesize < ((1 << 9) + 2 * wordSize)) {
|
||||||
|
@ -437,6 +437,13 @@ public:
|
|||||||
void push(RegSet regs, Register stack) { if (regs.bits()) push(regs.bits(), stack); }
|
void push(RegSet regs, Register stack) { if (regs.bits()) push(regs.bits(), stack); }
|
||||||
void pop(RegSet regs, Register stack) { if (regs.bits()) pop(regs.bits(), stack); }
|
void pop(RegSet regs, Register stack) { if (regs.bits()) pop(regs.bits(), stack); }
|
||||||
|
|
||||||
|
// Push and pop everything that might be clobbered by a native
|
||||||
|
// runtime call except rscratch1 and rscratch2. (They are always
|
||||||
|
// scratch, so we don't have to protect them.) Only save the lower
|
||||||
|
// 64 bits of each vector register.
|
||||||
|
void push_call_clobbered_registers();
|
||||||
|
void pop_call_clobbered_registers();
|
||||||
|
|
||||||
// now mov instructions for loading absolute addresses and 32 or
|
// now mov instructions for loading absolute addresses and 32 or
|
||||||
// 64 bit integers
|
// 64 bit integers
|
||||||
|
|
||||||
@ -1116,6 +1123,15 @@ public:
|
|||||||
// of your data.
|
// of your data.
|
||||||
Address form_address(Register Rd, Register base, long byte_offset, int shift);
|
Address form_address(Register Rd, Register base, long byte_offset, int shift);
|
||||||
|
|
||||||
|
// Return true iff an address is within the 48-bit AArch64 address
|
||||||
|
// space.
|
||||||
|
bool is_valid_AArch64_address(address a) {
|
||||||
|
return ((uint64_t)a >> 48) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load the base of the cardtable byte map into reg.
|
||||||
|
void load_byte_map_base(Register reg);
|
||||||
|
|
||||||
// Prolog generator routines to support switch between x86 code and
|
// Prolog generator routines to support switch between x86 code and
|
||||||
// generated ARM code
|
// generated ARM code
|
||||||
|
|
||||||
|
@ -87,7 +87,6 @@ void Relocation::pd_set_call_destination(address x) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
assert(addr() != x, "call instruction in an infinite loop");
|
|
||||||
MacroAssembler::pd_patch_instruction(addr(), x);
|
MacroAssembler::pd_patch_instruction(addr(), x);
|
||||||
assert(pd_call_destination(addr()) == x, "fail in reloc");
|
assert(pd_call_destination(addr()) == x, "fail in reloc");
|
||||||
}
|
}
|
||||||
|
@ -744,7 +744,7 @@ class StubGenerator: public StubCodeGenerator {
|
|||||||
__ sub(end, end, start); // number of bytes to copy
|
__ sub(end, end, start); // number of bytes to copy
|
||||||
|
|
||||||
const Register count = end; // 'end' register contains bytes count now
|
const Register count = end; // 'end' register contains bytes count now
|
||||||
__ mov(scratch, (address)ct->byte_map_base);
|
__ load_byte_map_base(scratch);
|
||||||
__ add(start, start, scratch);
|
__ add(start, start, scratch);
|
||||||
if (UseConcMarkSweepGC) {
|
if (UseConcMarkSweepGC) {
|
||||||
__ membar(__ StoreStore);
|
__ membar(__ StoreStore);
|
||||||
|
@ -930,7 +930,7 @@ address TemplateInterpreterGenerator::generate_Reference_get_entry(void) {
|
|||||||
|
|
||||||
// If G1 is not enabled then attempt to go through the accessor entry point
|
// If G1 is not enabled then attempt to go through the accessor entry point
|
||||||
// Reference.get is an accessor
|
// Reference.get is an accessor
|
||||||
return generate_accessor_entry();
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1056,7 +1056,7 @@ void TemplateInterpreterGenerator::bang_stack_shadow_pages(bool native_call) {
|
|||||||
// an interpreter frame with greater than a page of locals, so each page
|
// an interpreter frame with greater than a page of locals, so each page
|
||||||
// needs to be checked. Only true for non-native.
|
// needs to be checked. Only true for non-native.
|
||||||
if (UseStackBanging) {
|
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 start_page = native_call ? n_shadow_pages : 1;
|
||||||
const int page_size = os::vm_page_size();
|
const int page_size = os::vm_page_size();
|
||||||
for (int pages = start_page; pages <= n_shadow_pages ; pages++) {
|
for (int pages = start_page; pages <= n_shadow_pages ; pages++) {
|
||||||
@ -1398,8 +1398,8 @@ address TemplateInterpreterGenerator::generate_native_entry(bool synchronized) {
|
|||||||
{
|
{
|
||||||
Label no_reguard;
|
Label no_reguard;
|
||||||
__ lea(rscratch1, Address(rthread, in_bytes(JavaThread::stack_guard_state_offset())));
|
__ lea(rscratch1, Address(rthread, in_bytes(JavaThread::stack_guard_state_offset())));
|
||||||
__ ldrb(rscratch1, Address(rscratch1));
|
__ ldrw(rscratch1, Address(rscratch1));
|
||||||
__ cmp(rscratch1, JavaThread::stack_guard_yellow_disabled);
|
__ cmp(rscratch1, JavaThread::stack_guard_yellow_reserved_disabled);
|
||||||
__ br(Assembler::NE, no_reguard);
|
__ br(Assembler::NE, no_reguard);
|
||||||
|
|
||||||
__ pusha(); // XXX only save smashed registers
|
__ pusha(); // XXX only save smashed registers
|
||||||
|
@ -121,7 +121,6 @@ void VM_Version::get_processor_features() {
|
|||||||
FLAG_SET_DEFAULT(PrefetchScanIntervalInBytes, 256);
|
FLAG_SET_DEFAULT(PrefetchScanIntervalInBytes, 256);
|
||||||
FLAG_SET_DEFAULT(PrefetchFieldsAhead, 256);
|
FLAG_SET_DEFAULT(PrefetchFieldsAhead, 256);
|
||||||
FLAG_SET_DEFAULT(PrefetchCopyIntervalInBytes, 256);
|
FLAG_SET_DEFAULT(PrefetchCopyIntervalInBytes, 256);
|
||||||
FLAG_SET_DEFAULT(UseSSE42Intrinsics, true);
|
|
||||||
|
|
||||||
unsigned long auxv = getauxval(AT_HWCAP);
|
unsigned long auxv = getauxval(AT_HWCAP);
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright (c) 2015 SAP AG. All rights reserved.
|
* Copyright (c) 2015 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2015 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2015 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2015 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2013 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2013 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2015 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2015 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2015 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2015 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2015 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2015 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2015 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2015 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2015 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2015 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2015 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2015 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2015 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2015 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2015 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2015 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2013 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2013 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2015 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2013 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2013 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2013 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2013 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2013 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2013 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2013 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2013 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2015 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2015 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2015 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2015 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2015 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2013 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2013 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2013 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2013 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2013 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2013 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2015 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2013 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2013 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2014 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2014 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2014 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2014 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2013 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2013 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2013 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2013 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2013 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2013 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2015 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2016 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -3172,11 +3172,12 @@ void MacroAssembler::clear_memory_doubleword(Register base_ptr, Register cnt_dwo
|
|||||||
//
|
//
|
||||||
// Assumes that result differs from all other registers.
|
// Assumes that result differs from all other registers.
|
||||||
//
|
//
|
||||||
// Haystack, needle are the addresses of jchar-arrays.
|
// 'haystack' is the addresses of a jchar-array.
|
||||||
// NeedleChar is needle[0] if it is known at compile time.
|
// 'needle' is either the character to search for or R0.
|
||||||
// Haycnt is the length of the haystack. We assume haycnt >=1.
|
// 'needleChar' is the character to search for if 'needle' == R0..
|
||||||
|
// 'haycnt' is the length of the haystack. We assume 'haycnt' >=1.
|
||||||
//
|
//
|
||||||
// Preserves haystack, haycnt, kills all other registers.
|
// Preserves haystack, haycnt, needle and kills all other registers.
|
||||||
//
|
//
|
||||||
// If needle == R0, we search for the constant needleChar.
|
// If needle == R0, we search for the constant needleChar.
|
||||||
void MacroAssembler::string_indexof_1(Register result, Register haystack, Register haycnt,
|
void MacroAssembler::string_indexof_1(Register result, Register haystack, Register haycnt,
|
||||||
@ -3186,13 +3187,11 @@ void MacroAssembler::string_indexof_1(Register result, Register haystack, Regist
|
|||||||
assert_different_registers(result, haystack, haycnt, needle, tmp1, tmp2);
|
assert_different_registers(result, haystack, haycnt, needle, tmp1, tmp2);
|
||||||
|
|
||||||
Label L_InnerLoop, L_FinalCheck, L_Found1, L_Found2, L_Found3, L_NotFound, L_End;
|
Label L_InnerLoop, L_FinalCheck, L_Found1, L_Found2, L_Found3, L_NotFound, L_End;
|
||||||
Register needle0 = needle, // Contains needle[0].
|
Register addr = tmp1,
|
||||||
addr = tmp1,
|
|
||||||
ch1 = tmp2,
|
ch1 = tmp2,
|
||||||
ch2 = R0;
|
ch2 = R0;
|
||||||
|
|
||||||
//2 (variable) or 3 (const):
|
//3:
|
||||||
if (needle != R0) lhz(needle0, 0, needle); // Preload needle character, needle has len==1.
|
|
||||||
dcbtct(haystack, 0x00); // Indicate R/O access to haystack.
|
dcbtct(haystack, 0x00); // Indicate R/O access to haystack.
|
||||||
|
|
||||||
srwi_(tmp2, haycnt, 1); // Shift right by exact_log2(UNROLL_FACTOR).
|
srwi_(tmp2, haycnt, 1); // Shift right by exact_log2(UNROLL_FACTOR).
|
||||||
@ -3203,8 +3202,8 @@ void MacroAssembler::string_indexof_1(Register result, Register haystack, Regist
|
|||||||
bind(L_InnerLoop); // Main work horse (2x unrolled search loop).
|
bind(L_InnerLoop); // Main work horse (2x unrolled search loop).
|
||||||
lhz(ch1, 0, addr); // Load characters from haystack.
|
lhz(ch1, 0, addr); // Load characters from haystack.
|
||||||
lhz(ch2, 2, addr);
|
lhz(ch2, 2, addr);
|
||||||
(needle != R0) ? cmpw(CCR0, ch1, needle0) : cmplwi(CCR0, ch1, needleChar);
|
(needle != R0) ? cmpw(CCR0, ch1, needle) : cmplwi(CCR0, ch1, needleChar);
|
||||||
(needle != R0) ? cmpw(CCR1, ch2, needle0) : cmplwi(CCR1, ch2, needleChar);
|
(needle != R0) ? cmpw(CCR1, ch2, needle) : cmplwi(CCR1, ch2, needleChar);
|
||||||
beq(CCR0, L_Found1); // Did we find the needle?
|
beq(CCR0, L_Found1); // Did we find the needle?
|
||||||
beq(CCR1, L_Found2);
|
beq(CCR1, L_Found2);
|
||||||
addi(addr, addr, 4);
|
addi(addr, addr, 4);
|
||||||
@ -3214,7 +3213,7 @@ void MacroAssembler::string_indexof_1(Register result, Register haystack, Regist
|
|||||||
andi_(R0, haycnt, 1);
|
andi_(R0, haycnt, 1);
|
||||||
beq(CCR0, L_NotFound);
|
beq(CCR0, L_NotFound);
|
||||||
lhz(ch1, 0, addr); // One position left at which we have to compare.
|
lhz(ch1, 0, addr); // One position left at which we have to compare.
|
||||||
(needle != R0) ? cmpw(CCR1, ch1, needle0) : cmplwi(CCR1, ch1, needleChar);
|
(needle != R0) ? cmpw(CCR1, ch1, needle) : cmplwi(CCR1, ch1, needleChar);
|
||||||
beq(CCR1, L_Found3);
|
beq(CCR1, L_Found3);
|
||||||
//21:
|
//21:
|
||||||
bind(L_NotFound);
|
bind(L_NotFound);
|
||||||
@ -3399,7 +3398,15 @@ void MacroAssembler::string_compare(Register str1_reg, Register str2_reg, Regist
|
|||||||
chr2_reg = cnt2_reg,
|
chr2_reg = cnt2_reg,
|
||||||
addr_diff = str2_reg;
|
addr_diff = str2_reg;
|
||||||
|
|
||||||
|
// 'cnt_reg' contains the number of characters in the string's character array for the
|
||||||
|
// pre-CompactStrings strings implementation and the number of bytes in the string's
|
||||||
|
// byte array for the CompactStrings strings implementation.
|
||||||
|
const int HAS_COMPACT_STRING = java_lang_String::has_coder_field() ? 1 : 0; // '1' = byte array, '0' = char array
|
||||||
|
|
||||||
// Offset 0 should be 32 byte aligned.
|
// Offset 0 should be 32 byte aligned.
|
||||||
|
//-6:
|
||||||
|
srawi(cnt1_reg, cnt1_reg, HAS_COMPACT_STRING);
|
||||||
|
srawi(cnt2_reg, cnt2_reg, HAS_COMPACT_STRING);
|
||||||
//-4:
|
//-4:
|
||||||
dcbtct(str1_reg, 0x00); // Indicate R/O access to str1.
|
dcbtct(str1_reg, 0x00); // Indicate R/O access to str1.
|
||||||
dcbtct(str2_reg, 0x00); // Indicate R/O access to str2.
|
dcbtct(str2_reg, 0x00); // Indicate R/O access to str2.
|
||||||
@ -3478,14 +3485,21 @@ void MacroAssembler::char_arrays_equals(Register str1_reg, Register str2_reg, Re
|
|||||||
Register index_reg = tmp5_reg;
|
Register index_reg = tmp5_reg;
|
||||||
Register cbc_iter = tmp4_reg;
|
Register cbc_iter = tmp4_reg;
|
||||||
|
|
||||||
|
// 'cnt_reg' contains the number of characters in the string's character array for the
|
||||||
|
// pre-CompactStrings strings implementation and the number of bytes in the string's
|
||||||
|
// byte array for the CompactStrings strings implementation.
|
||||||
|
const int HAS_COMPACT_STRING = java_lang_String::has_coder_field() ? 1 : 0; // '1' = byte array, '0' = char array
|
||||||
|
|
||||||
//-1:
|
//-1:
|
||||||
dcbtct(str1_reg, 0x00); // Indicate R/O access to str1.
|
dcbtct(str1_reg, 0x00); // Indicate R/O access to str1.
|
||||||
dcbtct(str2_reg, 0x00); // Indicate R/O access to str2.
|
dcbtct(str2_reg, 0x00); // Indicate R/O access to str2.
|
||||||
//1:
|
//1:
|
||||||
andi(cbc_iter, cnt_reg, 4-1); // Remaining iterations after 4 java characters per iteration loop.
|
// cbc_iter: remaining characters after the '4 java characters per iteration' loop.
|
||||||
|
rlwinm(cbc_iter, cnt_reg, 32 - HAS_COMPACT_STRING, 30, 31); // (cnt_reg % (HAS_COMPACT_STRING ? 8 : 4)) >> HAS_COMPACT_STRING
|
||||||
li(index_reg, 0); // init
|
li(index_reg, 0); // init
|
||||||
li(result_reg, 0); // assume false
|
li(result_reg, 0); // assume false
|
||||||
srwi_(tmp2_reg, cnt_reg, exact_log2(4)); // Div: 4 java characters per iteration (main loop).
|
// tmp2_reg: units of 4 java characters (i.e. 8 bytes) per iteration (main loop).
|
||||||
|
srwi_(tmp2_reg, cnt_reg, exact_log2(4 << HAS_COMPACT_STRING)); // cnt_reg / (HAS_COMPACT_STRING ? 8 : 4)
|
||||||
|
|
||||||
cmpwi(CCR1, cbc_iter, 0); // CCR1 = (cbc_iter==0)
|
cmpwi(CCR1, cbc_iter, 0); // CCR1 = (cbc_iter==0)
|
||||||
beq(CCR0, Linit_cbc); // too short
|
beq(CCR0, Linit_cbc); // too short
|
||||||
@ -3526,6 +3540,11 @@ void MacroAssembler::char_arrays_equalsImm(Register str1_reg, Register str2_reg,
|
|||||||
assert(sizeof(jchar) == 2, "must be");
|
assert(sizeof(jchar) == 2, "must be");
|
||||||
assert(cntval >= 0 && ((cntval & 0x7fff) == cntval), "wrong immediate");
|
assert(cntval >= 0 && ((cntval & 0x7fff) == cntval), "wrong immediate");
|
||||||
|
|
||||||
|
// 'cntval' contains the number of characters in the string's character array for the
|
||||||
|
// pre-CompactStrings strings implementation and the number of bytes in the string's
|
||||||
|
// byte array for the CompactStrings strings implementation.
|
||||||
|
cntval >>= (java_lang_String::has_coder_field() ? 1 : 0); // '1' = byte array strings, '0' = char array strings
|
||||||
|
|
||||||
Label Ldone_false;
|
Label Ldone_false;
|
||||||
|
|
||||||
if (cntval < 16) { // short case
|
if (cntval < 16) { // short case
|
||||||
@ -3652,9 +3671,9 @@ int MacroAssembler::crc32_table_columns(Register table, Register tc0, Register t
|
|||||||
assert_different_registers(table, tc0, tc1, tc2);
|
assert_different_registers(table, tc0, tc1, tc2);
|
||||||
assert(table == tc3, "must be!");
|
assert(table == tc3, "must be!");
|
||||||
|
|
||||||
if (ix0 != 0) addi(tc0, table, ix0);
|
addi(tc0, table, ix0);
|
||||||
if (ix1 != 0) addi(tc1, table, ix1);
|
addi(tc1, table, ix1);
|
||||||
if (ix2 != 0) addi(tc2, table, ix2);
|
addi(tc2, table, ix2);
|
||||||
if (ix3 != 0) addi(tc3, table, ix3);
|
if (ix3 != 0) addi(tc3, table, ix3);
|
||||||
|
|
||||||
return ix3;
|
return ix3;
|
||||||
@ -3720,14 +3739,14 @@ void MacroAssembler::update_byteLoop_crc32(Register crc, Register buf, Register
|
|||||||
const int mainLoop_alignment = loopAlignment ? 32 : 4; // (InputForNewCode > 4 ? InputForNewCode : 32) : 4;
|
const int mainLoop_alignment = loopAlignment ? 32 : 4; // (InputForNewCode > 4 ? InputForNewCode : 32) : 4;
|
||||||
|
|
||||||
// Process all bytes in a single-byte loop.
|
// Process all bytes in a single-byte loop.
|
||||||
cmpdi(CCR0, len, 0); // Anything to do?
|
clrldi_(len, len, 32); // Enforce 32 bit. Anything to do?
|
||||||
mtctr(len);
|
|
||||||
beq(CCR0, L_done);
|
beq(CCR0, L_done);
|
||||||
|
|
||||||
if (invertCRC) {
|
if (invertCRC) {
|
||||||
nand(crc, crc, crc); // ~c
|
nand(crc, crc, crc); // ~c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mtctr(len);
|
||||||
align(mainLoop_alignment);
|
align(mainLoop_alignment);
|
||||||
BIND(L_mainLoop);
|
BIND(L_mainLoop);
|
||||||
lbz(data, 0, buf); // Byte from buffer, zero-extended.
|
lbz(data, 0, buf); // Byte from buffer, zero-extended.
|
||||||
@ -3943,7 +3962,7 @@ void MacroAssembler::kernel_crc32_1word(Register crc, Register buf, Register len
|
|||||||
#else
|
#else
|
||||||
Register crc_rv = tmp; // Load_reverse needs separate registers to work on.
|
Register crc_rv = tmp; // Load_reverse needs separate registers to work on.
|
||||||
// Occupies tmp, but frees up crc.
|
// 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;
|
tmp = crc;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2015 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2015 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2013 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2013 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2015 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2015 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2015 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2015 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
//
|
//
|
||||||
// Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
|
// Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||||
// Copyright 2012, 2015 SAP AG. All rights reserved.
|
// Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||||
// DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
// DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
//
|
//
|
||||||
// This code is free software; you can redistribute it and/or modify it
|
// This code is free software; you can redistribute it and/or modify it
|
||||||
@ -956,36 +956,40 @@ static int cc_to_biint(int cc, int flags_reg) {
|
|||||||
// the instruction. The padding must match the size of a NOP instruction.
|
// the instruction. The padding must match the size of a NOP instruction.
|
||||||
|
|
||||||
int string_indexOf_imm1_charNode::compute_padding(int current_offset) const {
|
int string_indexOf_imm1_charNode::compute_padding(int current_offset) const {
|
||||||
return (3*4-current_offset)&31;
|
return (3*4-current_offset)&31; // see MacroAssembler::string_indexof_1
|
||||||
}
|
}
|
||||||
|
|
||||||
int string_indexOf_imm1Node::compute_padding(int current_offset) const {
|
int string_indexOf_imm1Node::compute_padding(int current_offset) const {
|
||||||
return (2*4-current_offset)&31;
|
return (3*4-current_offset)&31; // see MacroAssembler::string_indexof_1
|
||||||
|
}
|
||||||
|
|
||||||
|
int string_indexOfCharNode::compute_padding(int current_offset) const {
|
||||||
|
return (3*4-current_offset)&31; // see MacroAssembler::string_indexof_1
|
||||||
}
|
}
|
||||||
|
|
||||||
int string_indexOf_immNode::compute_padding(int current_offset) const {
|
int string_indexOf_immNode::compute_padding(int current_offset) const {
|
||||||
return (3*4-current_offset)&31;
|
return (3*4-current_offset)&31; // see MacroAssembler::string_indexof(constant needlecount)
|
||||||
}
|
}
|
||||||
|
|
||||||
int string_indexOfNode::compute_padding(int current_offset) const {
|
int string_indexOfNode::compute_padding(int current_offset) const {
|
||||||
return (1*4-current_offset)&31;
|
return (1*4-current_offset)&31; // see MacroAssembler::string_indexof(variable needlecount)
|
||||||
}
|
}
|
||||||
|
|
||||||
int string_compareNode::compute_padding(int current_offset) const {
|
int string_compareNode::compute_padding(int current_offset) const {
|
||||||
return (4*4-current_offset)&31;
|
return (2*4-current_offset)&31; // see MacroAssembler::string_compare
|
||||||
}
|
}
|
||||||
|
|
||||||
int string_equals_immNode::compute_padding(int current_offset) const {
|
int string_equals_immNode::compute_padding(int current_offset) const {
|
||||||
if (opnd_array(3)->constant() < 16) return 0; // Don't insert nops for short version (loop completely unrolled).
|
if (opnd_array(3)->constant() < 16) return 0; // For strlen < 16 no nops because loop completely unrolled
|
||||||
return (2*4-current_offset)&31;
|
return (2*4-current_offset)&31; // Genral case - see MacroAssembler::char_arrays_equalsImm
|
||||||
}
|
}
|
||||||
|
|
||||||
int string_equalsNode::compute_padding(int current_offset) const {
|
int string_equalsNode::compute_padding(int current_offset) const {
|
||||||
return (7*4-current_offset)&31;
|
return (7*4-current_offset)&31; // see MacroAssembler::char_arrays_equals
|
||||||
}
|
}
|
||||||
|
|
||||||
int inlineCallClearArrayNode::compute_padding(int current_offset) const {
|
int inlineCallClearArrayNode::compute_padding(int current_offset) const {
|
||||||
return (2*4-current_offset)&31;
|
return (2*4-current_offset)&31; // see MacroAssembler::clear_memory_doubleword
|
||||||
}
|
}
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
@ -2025,6 +2029,8 @@ const bool Matcher::match_rule_supported(int opcode) {
|
|||||||
return SpecialStringEquals && !CompactStrings;
|
return SpecialStringEquals && !CompactStrings;
|
||||||
case Op_StrIndexOf:
|
case Op_StrIndexOf:
|
||||||
return SpecialStringIndexOf && !CompactStrings;
|
return SpecialStringIndexOf && !CompactStrings;
|
||||||
|
case Op_StrIndexOfChar:
|
||||||
|
return SpecialStringIndexOf && !CompactStrings;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true; // Per default match rules are supported.
|
return true; // Per default match rules are supported.
|
||||||
@ -11034,11 +11040,11 @@ instruct inlineCallClearArray(rarg1RegL cnt, rarg2RegP base, Universe dummy, reg
|
|||||||
instruct string_indexOf_imm1_char(iRegIdst result, iRegPsrc haystack, iRegIsrc haycnt,
|
instruct string_indexOf_imm1_char(iRegIdst result, iRegPsrc haystack, iRegIsrc haycnt,
|
||||||
immP needleImm, immL offsetImm, immI_1 needlecntImm,
|
immP needleImm, immL offsetImm, immI_1 needlecntImm,
|
||||||
iRegIdst tmp1, iRegIdst tmp2,
|
iRegIdst tmp1, iRegIdst tmp2,
|
||||||
flagsRegCR0 cr0, flagsRegCR1 cr1) %{
|
flagsRegCR0 cr0, flagsRegCR1 cr1, regCTR ctr) %{
|
||||||
predicate(SpecialStringIndexOf && !CompactStrings); // type check implicit by parameter type, See Matcher::match_rule_supported
|
predicate(SpecialStringIndexOf && !CompactStrings); // type check implicit by parameter type, See Matcher::match_rule_supported
|
||||||
match(Set result (StrIndexOf (Binary haystack haycnt) (Binary (AddP needleImm offsetImm) needlecntImm)));
|
match(Set result (StrIndexOf (Binary haystack haycnt) (Binary (AddP needleImm offsetImm) needlecntImm)));
|
||||||
|
|
||||||
effect(TEMP_DEF result, TEMP tmp1, TEMP tmp2, KILL cr0, KILL cr1);
|
effect(TEMP_DEF result, TEMP tmp1, TEMP tmp2, KILL cr0, KILL cr1, KILL ctr);
|
||||||
|
|
||||||
ins_cost(150);
|
ins_cost(150);
|
||||||
format %{ "String IndexOf CSCL1 $haystack[0..$haycnt], $needleImm+$offsetImm[0..$needlecntImm]"
|
format %{ "String IndexOf CSCL1 $haystack[0..$haycnt], $needleImm+$offsetImm[0..$needlecntImm]"
|
||||||
@ -11050,10 +11056,23 @@ instruct string_indexOf_imm1_char(iRegIdst result, iRegPsrc haystack, iRegIsrc h
|
|||||||
immPOper *needleOper = (immPOper *)$needleImm;
|
immPOper *needleOper = (immPOper *)$needleImm;
|
||||||
const TypeOopPtr *t = needleOper->type()->isa_oopptr();
|
const TypeOopPtr *t = needleOper->type()->isa_oopptr();
|
||||||
ciTypeArray* needle_values = t->const_oop()->as_type_array(); // Pointer to live char *
|
ciTypeArray* needle_values = t->const_oop()->as_type_array(); // Pointer to live char *
|
||||||
|
jchar chr;
|
||||||
|
if (java_lang_String::has_coder_field()) {
|
||||||
|
// New compact strings byte array strings
|
||||||
|
#ifdef VM_LITTLE_ENDIAN
|
||||||
|
chr = (((jchar)needle_values->element_value(1).as_byte()) << 8) |
|
||||||
|
(jchar)needle_values->element_value(0).as_byte();
|
||||||
|
#else
|
||||||
|
chr = (((jchar)needle_values->element_value(0).as_byte()) << 8) |
|
||||||
|
(jchar)needle_values->element_value(1).as_byte();
|
||||||
|
#endif
|
||||||
|
} else {
|
||||||
|
// Old char array strings
|
||||||
|
chr = needle_values->char_at(0);
|
||||||
|
}
|
||||||
__ string_indexof_1($result$$Register,
|
__ string_indexof_1($result$$Register,
|
||||||
$haystack$$Register, $haycnt$$Register,
|
$haystack$$Register, $haycnt$$Register,
|
||||||
R0, needle_values->char_at(0),
|
R0, chr,
|
||||||
$tmp1$$Register, $tmp2$$Register);
|
$tmp1$$Register, $tmp2$$Register);
|
||||||
%}
|
%}
|
||||||
ins_pipe(pipe_class_compare);
|
ins_pipe(pipe_class_compare);
|
||||||
@ -11073,12 +11092,13 @@ instruct string_indexOf_imm1_char(iRegIdst result, iRegPsrc haystack, iRegIsrc h
|
|||||||
instruct string_indexOf_imm1(iRegIdst result, iRegPsrc haystack, iRegIsrc haycnt,
|
instruct string_indexOf_imm1(iRegIdst result, iRegPsrc haystack, iRegIsrc haycnt,
|
||||||
rscratch2RegP needle, immI_1 needlecntImm,
|
rscratch2RegP needle, immI_1 needlecntImm,
|
||||||
iRegIdst tmp1, iRegIdst tmp2,
|
iRegIdst tmp1, iRegIdst tmp2,
|
||||||
flagsRegCR0 cr0, flagsRegCR1 cr1) %{
|
flagsRegCR0 cr0, flagsRegCR1 cr1, regCTR ctr) %{
|
||||||
match(Set result (StrIndexOf (Binary haystack haycnt) (Binary needle needlecntImm)));
|
match(Set result (StrIndexOf (Binary haystack haycnt) (Binary needle needlecntImm)));
|
||||||
effect(USE_KILL needle, /* TDEF needle, */ TEMP_DEF result,
|
effect(USE_KILL needle, /* TDEF needle, */ TEMP_DEF result,
|
||||||
TEMP tmp1, TEMP tmp2);
|
TEMP tmp1, TEMP tmp2, KILL cr0, KILL cr1, KILL ctr);
|
||||||
// Required for EA: check if it is still a type_array.
|
// Required for EA: check if it is still a type_array.
|
||||||
predicate(SpecialStringIndexOf && !CompactStrings && n->in(3)->in(1)->bottom_type()->is_aryptr()->const_oop() &&
|
predicate(SpecialStringIndexOf && !CompactStrings &&
|
||||||
|
n->in(3)->in(1)->bottom_type()->is_aryptr()->const_oop() &&
|
||||||
n->in(3)->in(1)->bottom_type()->is_aryptr()->const_oop()->is_type_array());
|
n->in(3)->in(1)->bottom_type()->is_aryptr()->const_oop()->is_type_array());
|
||||||
ins_cost(180);
|
ins_cost(180);
|
||||||
|
|
||||||
@ -11091,17 +11111,54 @@ instruct string_indexOf_imm1(iRegIdst result, iRegPsrc haystack, iRegIsrc haycnt
|
|||||||
Node *ndl = in(operand_index($needle)); // The node that defines needle.
|
Node *ndl = in(operand_index($needle)); // The node that defines needle.
|
||||||
ciTypeArray* needle_values = ndl->bottom_type()->is_aryptr()->const_oop()->as_type_array();
|
ciTypeArray* needle_values = ndl->bottom_type()->is_aryptr()->const_oop()->as_type_array();
|
||||||
guarantee(needle_values, "sanity");
|
guarantee(needle_values, "sanity");
|
||||||
if (needle_values != NULL) {
|
jchar chr;
|
||||||
__ string_indexof_1($result$$Register,
|
if (java_lang_String::has_coder_field()) {
|
||||||
$haystack$$Register, $haycnt$$Register,
|
// New compact strings byte array strings
|
||||||
R0, needle_values->char_at(0),
|
#ifdef VM_LITTLE_ENDIAN
|
||||||
$tmp1$$Register, $tmp2$$Register);
|
chr = (((jchar)needle_values->element_value(1).as_byte()) << 8) |
|
||||||
|
(jchar)needle_values->element_value(0).as_byte();
|
||||||
|
#else
|
||||||
|
chr = (((jchar)needle_values->element_value(0).as_byte()) << 8) |
|
||||||
|
(jchar)needle_values->element_value(1).as_byte();
|
||||||
|
#endif
|
||||||
} else {
|
} else {
|
||||||
__ string_indexof_1($result$$Register,
|
// Old char array strings
|
||||||
$haystack$$Register, $haycnt$$Register,
|
chr = needle_values->char_at(0);
|
||||||
$needle$$Register, 0,
|
|
||||||
$tmp1$$Register, $tmp2$$Register);
|
|
||||||
}
|
}
|
||||||
|
__ string_indexof_1($result$$Register,
|
||||||
|
$haystack$$Register, $haycnt$$Register,
|
||||||
|
R0, chr,
|
||||||
|
$tmp1$$Register, $tmp2$$Register);
|
||||||
|
%}
|
||||||
|
ins_pipe(pipe_class_compare);
|
||||||
|
%}
|
||||||
|
|
||||||
|
// String_IndexOfChar
|
||||||
|
//
|
||||||
|
// Assumes register result differs from all input registers.
|
||||||
|
//
|
||||||
|
// Preserves registers haystack, haycnt
|
||||||
|
// Kills registers tmp1, tmp2
|
||||||
|
// Defines registers result
|
||||||
|
//
|
||||||
|
// Use dst register classes if register gets killed, as it is the case for tmp registers!
|
||||||
|
instruct string_indexOfChar(iRegIdst result, iRegPsrc haystack, iRegIsrc haycnt,
|
||||||
|
iRegIsrc ch, iRegIdst tmp1, iRegIdst tmp2,
|
||||||
|
flagsRegCR0 cr0, flagsRegCR1 cr1, regCTR ctr) %{
|
||||||
|
match(Set result (StrIndexOfChar (Binary haystack haycnt) ch));
|
||||||
|
effect(TEMP_DEF result, TEMP tmp1, TEMP tmp2, KILL cr0, KILL cr1, KILL ctr);
|
||||||
|
predicate(SpecialStringIndexOf && !CompactStrings);
|
||||||
|
ins_cost(180);
|
||||||
|
|
||||||
|
ins_alignment(8); // 'compute_padding()' gets called, up to this number-1 nops will get inserted.
|
||||||
|
|
||||||
|
format %{ "String IndexOfChar $haystack[0..$haycnt], $ch"
|
||||||
|
" -> $result \t// KILL $haycnt, $tmp1, $tmp2, $cr0, $cr1" %}
|
||||||
|
ins_encode %{
|
||||||
|
__ string_indexof_1($result$$Register,
|
||||||
|
$haystack$$Register, $haycnt$$Register,
|
||||||
|
$ch$$Register, 0 /* this is not used if the character is already in a register */,
|
||||||
|
$tmp1$$Register, $tmp2$$Register);
|
||||||
%}
|
%}
|
||||||
ins_pipe(pipe_class_compare);
|
ins_pipe(pipe_class_compare);
|
||||||
%}
|
%}
|
||||||
@ -11120,10 +11177,10 @@ instruct string_indexOf_imm1(iRegIdst result, iRegPsrc haystack, iRegIsrc haycnt
|
|||||||
instruct string_indexOf_imm(iRegIdst result, iRegPsrc haystack, rscratch1RegI haycnt,
|
instruct string_indexOf_imm(iRegIdst result, iRegPsrc haystack, rscratch1RegI haycnt,
|
||||||
iRegPsrc needle, uimmI15 needlecntImm,
|
iRegPsrc needle, uimmI15 needlecntImm,
|
||||||
iRegIdst tmp1, iRegIdst tmp2, iRegIdst tmp3, iRegIdst tmp4, iRegIdst tmp5,
|
iRegIdst tmp1, iRegIdst tmp2, iRegIdst tmp3, iRegIdst tmp4, iRegIdst tmp5,
|
||||||
flagsRegCR0 cr0, flagsRegCR1 cr1, flagsRegCR6 cr6) %{
|
flagsRegCR0 cr0, flagsRegCR1 cr1, flagsRegCR6 cr6, regCTR ctr) %{
|
||||||
match(Set result (StrIndexOf (Binary haystack haycnt) (Binary needle needlecntImm)));
|
match(Set result (StrIndexOf (Binary haystack haycnt) (Binary needle needlecntImm)));
|
||||||
effect(USE_KILL haycnt, /* better: TDEF haycnt, */ TEMP_DEF result,
|
effect(USE_KILL haycnt, /* better: TDEF haycnt, */ TEMP_DEF result,
|
||||||
TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4, TEMP tmp5, KILL cr0, KILL cr1, KILL cr6);
|
TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4, TEMP tmp5, KILL cr0, KILL cr1, KILL cr6, KILL ctr);
|
||||||
// Required for EA: check if it is still a type_array.
|
// Required for EA: check if it is still a type_array.
|
||||||
predicate(SpecialStringIndexOf && !CompactStrings && n->in(3)->in(1)->bottom_type()->is_aryptr()->const_oop() &&
|
predicate(SpecialStringIndexOf && !CompactStrings && n->in(3)->in(1)->bottom_type()->is_aryptr()->const_oop() &&
|
||||||
n->in(3)->in(1)->bottom_type()->is_aryptr()->const_oop()->is_type_array());
|
n->in(3)->in(1)->bottom_type()->is_aryptr()->const_oop()->is_type_array());
|
||||||
@ -11153,11 +11210,11 @@ instruct string_indexOf_imm(iRegIdst result, iRegPsrc haystack, rscratch1RegI ha
|
|||||||
// Use dst register classes if register gets killed, as it is the case for tmp registers!
|
// Use dst register classes if register gets killed, as it is the case for tmp registers!
|
||||||
instruct string_indexOf(iRegIdst result, iRegPsrc haystack, rscratch1RegI haycnt, iRegPsrc needle, rscratch2RegI needlecnt,
|
instruct string_indexOf(iRegIdst result, iRegPsrc haystack, rscratch1RegI haycnt, iRegPsrc needle, rscratch2RegI needlecnt,
|
||||||
iRegLdst tmp1, iRegLdst tmp2, iRegLdst tmp3, iRegLdst tmp4,
|
iRegLdst tmp1, iRegLdst tmp2, iRegLdst tmp3, iRegLdst tmp4,
|
||||||
flagsRegCR0 cr0, flagsRegCR1 cr1, flagsRegCR6 cr6) %{
|
flagsRegCR0 cr0, flagsRegCR1 cr1, flagsRegCR6 cr6, regCTR ctr) %{
|
||||||
match(Set result (StrIndexOf (Binary haystack haycnt) (Binary needle needlecnt)));
|
match(Set result (StrIndexOf (Binary haystack haycnt) (Binary needle needlecnt)));
|
||||||
effect(USE_KILL haycnt, USE_KILL needlecnt, /*better: TDEF haycnt, TDEF needlecnt,*/
|
effect(USE_KILL haycnt, USE_KILL needlecnt, /*better: TDEF haycnt, TDEF needlecnt,*/
|
||||||
TEMP_DEF result,
|
TEMP_DEF result,
|
||||||
TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4, KILL cr0, KILL cr1, KILL cr6);
|
TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4, KILL cr0, KILL cr1, KILL cr6, KILL ctr);
|
||||||
predicate(SpecialStringIndexOf && !CompactStrings); // See Matcher::match_rule_supported.
|
predicate(SpecialStringIndexOf && !CompactStrings); // See Matcher::match_rule_supported.
|
||||||
ins_cost(300);
|
ins_cost(300);
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
//
|
//
|
||||||
// Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
|
// Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
// Copyright 2012, 2013 SAP AG. All rights reserved.
|
// Copyright (c) 2012, 2013 SAP SE. All rights reserved.
|
||||||
// DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
// DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
//
|
//
|
||||||
// This code is free software; you can redistribute it and/or modify it
|
// This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2013 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2013 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2015 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2013 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2013 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2014 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2014 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -609,13 +609,11 @@ REGISTER_DECLARATION(Register, R26_tmp6, R26);
|
|||||||
REGISTER_DECLARATION(Register, R27_tmp7, R27);
|
REGISTER_DECLARATION(Register, R27_tmp7, R27);
|
||||||
REGISTER_DECLARATION(Register, R28_tmp8, R28);
|
REGISTER_DECLARATION(Register, R28_tmp8, R28);
|
||||||
REGISTER_DECLARATION(Register, R29_tmp9, R29);
|
REGISTER_DECLARATION(Register, R29_tmp9, R29);
|
||||||
#ifndef CC_INTERP
|
|
||||||
REGISTER_DECLARATION(Register, R24_dispatch_addr, R24);
|
REGISTER_DECLARATION(Register, R24_dispatch_addr, R24);
|
||||||
REGISTER_DECLARATION(Register, R25_templateTableBase, R25);
|
REGISTER_DECLARATION(Register, R25_templateTableBase, R25);
|
||||||
REGISTER_DECLARATION(Register, R26_monitor, R26);
|
REGISTER_DECLARATION(Register, R26_monitor, R26);
|
||||||
REGISTER_DECLARATION(Register, R27_constPoolCache, R27);
|
REGISTER_DECLARATION(Register, R27_constPoolCache, R27);
|
||||||
REGISTER_DECLARATION(Register, R28_mdx, R28);
|
REGISTER_DECLARATION(Register, R28_mdx, R28);
|
||||||
#endif // CC_INTERP
|
|
||||||
|
|
||||||
REGISTER_DECLARATION(Register, R19_inline_cache_reg, R19);
|
REGISTER_DECLARATION(Register, R19_inline_cache_reg, R19);
|
||||||
REGISTER_DECLARATION(Register, R29_TOC, R29);
|
REGISTER_DECLARATION(Register, R29_TOC, R29);
|
||||||
@ -638,12 +636,9 @@ REGISTER_DECLARATION(Register, R29_TOC, R29);
|
|||||||
#define R26_monitor AS_REGISTER(Register, R26)
|
#define R26_monitor AS_REGISTER(Register, R26)
|
||||||
#define R27_constPoolCache AS_REGISTER(Register, R27)
|
#define R27_constPoolCache AS_REGISTER(Register, R27)
|
||||||
#define R28_mdx AS_REGISTER(Register, R28)
|
#define R28_mdx AS_REGISTER(Register, R28)
|
||||||
#endif
|
|
||||||
|
|
||||||
#define R19_inline_cache_reg AS_REGISTER(Register, R19)
|
#define R19_inline_cache_reg AS_REGISTER(Register, R19)
|
||||||
#define R29_TOC AS_REGISTER(Register, R29)
|
#define R29_TOC AS_REGISTER(Register, R29)
|
||||||
|
|
||||||
#define CCR4_is_synced AS_REGISTER(ConditionRegister, CCR4)
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Scratch registers are volatile.
|
// Scratch registers are volatile.
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2015 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2013 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2013 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2015 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
* Copyright (c) 2012, 2016 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -3400,9 +3400,9 @@ static void reverse_words(unsigned long *s, unsigned long *d, int len) {
|
|||||||
void SharedRuntime::montgomery_multiply(jint *a_ints, jint *b_ints, jint *n_ints,
|
void SharedRuntime::montgomery_multiply(jint *a_ints, jint *b_ints, jint *n_ints,
|
||||||
jint len, jlong inv,
|
jint len, jlong inv,
|
||||||
jint *m_ints) {
|
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");
|
assert(len % 2 == 0, "array length in montgomery_multiply must be even");
|
||||||
int longwords = len/2;
|
int longwords = len/2;
|
||||||
assert(longwords > 0, "unsupported");
|
|
||||||
|
|
||||||
// Make very sure we don't use so much space that the stack might
|
// Make very sure we don't use so much space that the stack might
|
||||||
// overflow. 512 jints corresponds to an 16384-bit integer and
|
// overflow. 512 jints corresponds to an 16384-bit integer and
|
||||||
@ -3430,9 +3430,9 @@ void SharedRuntime::montgomery_multiply(jint *a_ints, jint *b_ints, jint *n_ints
|
|||||||
void SharedRuntime::montgomery_square(jint *a_ints, jint *n_ints,
|
void SharedRuntime::montgomery_square(jint *a_ints, jint *n_ints,
|
||||||
jint len, jlong inv,
|
jint len, jlong inv,
|
||||||
jint *m_ints) {
|
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");
|
assert(len % 2 == 0, "array length in montgomery_square must be even");
|
||||||
int longwords = len/2;
|
int longwords = len/2;
|
||||||
assert(longwords > 0, "unsupported");
|
|
||||||
|
|
||||||
// Make very sure we don't use so much space that the stack might
|
// Make very sure we don't use so much space that the stack might
|
||||||
// overflow. 512 jints corresponds to an 16384-bit integer and
|
// overflow. 512 jints corresponds to an 16384-bit integer and
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2015 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2016 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -1070,6 +1070,12 @@ class StubGenerator: public StubCodeGenerator {
|
|||||||
return start;
|
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.
|
// Generate overlap test for array copy stubs.
|
||||||
//
|
//
|
||||||
@ -1082,10 +1088,7 @@ class StubGenerator: public StubCodeGenerator {
|
|||||||
Register tmp1 = R6_ARG4;
|
Register tmp1 = R6_ARG4;
|
||||||
Register tmp2 = R7_ARG5;
|
Register tmp2 = R7_ARG5;
|
||||||
|
|
||||||
#ifdef ASSERT
|
assert_positive_int(R5_ARG3);
|
||||||
__ srdi_(tmp2, R5_ARG3, 31);
|
|
||||||
__ asm_assert_eq("missing zero extend", 0xAFFE);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
__ subf(tmp1, R3_ARG1, R4_ARG2); // distance in bytes
|
__ subf(tmp1, R3_ARG1, R4_ARG2); // distance in bytes
|
||||||
__ sldi(tmp2, R5_ARG3, log2_elem_size); // size in bytes
|
__ sldi(tmp2, R5_ARG3, log2_elem_size); // size in bytes
|
||||||
@ -1125,14 +1128,15 @@ class StubGenerator: public StubCodeGenerator {
|
|||||||
address generate_disjoint_byte_copy(bool aligned, const char * name) {
|
address generate_disjoint_byte_copy(bool aligned, const char * name) {
|
||||||
StubCodeMark mark(this, "StubRoutines", name);
|
StubCodeMark mark(this, "StubRoutines", name);
|
||||||
address start = __ function_entry();
|
address start = __ function_entry();
|
||||||
|
assert_positive_int(R5_ARG3);
|
||||||
|
|
||||||
Register tmp1 = R6_ARG4;
|
Register tmp1 = R6_ARG4;
|
||||||
Register tmp2 = R7_ARG5;
|
Register tmp2 = R7_ARG5;
|
||||||
Register tmp3 = R8_ARG6;
|
Register tmp3 = R8_ARG6;
|
||||||
Register tmp4 = R9_ARG7;
|
Register tmp4 = R9_ARG7;
|
||||||
|
|
||||||
|
|
||||||
Label l_1, l_2, l_3, l_4, l_5, l_6, l_7, l_8, l_9;
|
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.
|
// Don't try anything fancy if arrays don't have many elements.
|
||||||
__ li(tmp3, 0);
|
__ li(tmp3, 0);
|
||||||
__ cmpwi(CCR0, R5_ARG3, 17);
|
__ cmpwi(CCR0, R5_ARG3, 17);
|
||||||
@ -1257,6 +1261,7 @@ class StubGenerator: public StubCodeGenerator {
|
|||||||
address generate_conjoint_byte_copy(bool aligned, const char * name) {
|
address generate_conjoint_byte_copy(bool aligned, const char * name) {
|
||||||
StubCodeMark mark(this, "StubRoutines", name);
|
StubCodeMark mark(this, "StubRoutines", name);
|
||||||
address start = __ function_entry();
|
address start = __ function_entry();
|
||||||
|
assert_positive_int(R5_ARG3);
|
||||||
|
|
||||||
Register tmp1 = R6_ARG4;
|
Register tmp1 = R6_ARG4;
|
||||||
Register tmp2 = R7_ARG5;
|
Register tmp2 = R7_ARG5;
|
||||||
@ -1349,8 +1354,10 @@ class StubGenerator: public StubCodeGenerator {
|
|||||||
Register tmp4 = R9_ARG7;
|
Register tmp4 = R9_ARG7;
|
||||||
|
|
||||||
address start = __ function_entry();
|
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;
|
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
|
// don't try anything fancy if arrays don't have many elements
|
||||||
__ li(tmp3, 0);
|
__ li(tmp3, 0);
|
||||||
__ cmpwi(CCR0, R5_ARG3, 9);
|
__ cmpwi(CCR0, R5_ARG3, 9);
|
||||||
@ -1479,6 +1486,7 @@ class StubGenerator: public StubCodeGenerator {
|
|||||||
address generate_conjoint_short_copy(bool aligned, const char * name) {
|
address generate_conjoint_short_copy(bool aligned, const char * name) {
|
||||||
StubCodeMark mark(this, "StubRoutines", name);
|
StubCodeMark mark(this, "StubRoutines", name);
|
||||||
address start = __ function_entry();
|
address start = __ function_entry();
|
||||||
|
assert_positive_int(R5_ARG3);
|
||||||
|
|
||||||
Register tmp1 = R6_ARG4;
|
Register tmp1 = R6_ARG4;
|
||||||
Register tmp2 = R7_ARG5;
|
Register tmp2 = R7_ARG5;
|
||||||
@ -1521,6 +1529,7 @@ class StubGenerator: public StubCodeGenerator {
|
|||||||
Register tmp4 = R0;
|
Register tmp4 = R0;
|
||||||
|
|
||||||
Label l_1, l_2, l_3, l_4, l_5, l_6;
|
Label l_1, l_2, l_3, l_4, l_5, l_6;
|
||||||
|
|
||||||
// for short arrays, just do single element copy
|
// for short arrays, just do single element copy
|
||||||
__ li(tmp3, 0);
|
__ li(tmp3, 0);
|
||||||
__ cmpwi(CCR0, R5_ARG3, 5);
|
__ cmpwi(CCR0, R5_ARG3, 5);
|
||||||
@ -1603,6 +1612,7 @@ class StubGenerator: public StubCodeGenerator {
|
|||||||
address generate_disjoint_int_copy(bool aligned, const char * name) {
|
address generate_disjoint_int_copy(bool aligned, const char * name) {
|
||||||
StubCodeMark mark(this, "StubRoutines", name);
|
StubCodeMark mark(this, "StubRoutines", name);
|
||||||
address start = __ function_entry();
|
address start = __ function_entry();
|
||||||
|
assert_positive_int(R5_ARG3);
|
||||||
generate_disjoint_int_copy_core(aligned);
|
generate_disjoint_int_copy_core(aligned);
|
||||||
__ li(R3_RET, 0); // return 0
|
__ li(R3_RET, 0); // return 0
|
||||||
__ blr();
|
__ blr();
|
||||||
@ -1688,7 +1698,7 @@ class StubGenerator: public StubCodeGenerator {
|
|||||||
address generate_conjoint_int_copy(bool aligned, const char * name) {
|
address generate_conjoint_int_copy(bool aligned, const char * name) {
|
||||||
StubCodeMark mark(this, "StubRoutines", name);
|
StubCodeMark mark(this, "StubRoutines", name);
|
||||||
address start = __ function_entry();
|
address start = __ function_entry();
|
||||||
|
assert_positive_int(R5_ARG3);
|
||||||
address nooverlap_target = aligned ?
|
address nooverlap_target = aligned ?
|
||||||
STUB_ENTRY(arrayof_jint_disjoint_arraycopy) :
|
STUB_ENTRY(arrayof_jint_disjoint_arraycopy) :
|
||||||
STUB_ENTRY(jint_disjoint_arraycopy);
|
STUB_ENTRY(jint_disjoint_arraycopy);
|
||||||
@ -1775,6 +1785,7 @@ class StubGenerator: public StubCodeGenerator {
|
|||||||
address generate_disjoint_long_copy(bool aligned, const char * name) {
|
address generate_disjoint_long_copy(bool aligned, const char * name) {
|
||||||
StubCodeMark mark(this, "StubRoutines", name);
|
StubCodeMark mark(this, "StubRoutines", name);
|
||||||
address start = __ function_entry();
|
address start = __ function_entry();
|
||||||
|
assert_positive_int(R5_ARG3);
|
||||||
generate_disjoint_long_copy_core(aligned);
|
generate_disjoint_long_copy_core(aligned);
|
||||||
__ li(R3_RET, 0); // return 0
|
__ li(R3_RET, 0); // return 0
|
||||||
__ blr();
|
__ blr();
|
||||||
@ -1858,7 +1869,7 @@ class StubGenerator: public StubCodeGenerator {
|
|||||||
address generate_conjoint_long_copy(bool aligned, const char * name) {
|
address generate_conjoint_long_copy(bool aligned, const char * name) {
|
||||||
StubCodeMark mark(this, "StubRoutines", name);
|
StubCodeMark mark(this, "StubRoutines", name);
|
||||||
address start = __ function_entry();
|
address start = __ function_entry();
|
||||||
|
assert_positive_int(R5_ARG3);
|
||||||
address nooverlap_target = aligned ?
|
address nooverlap_target = aligned ?
|
||||||
STUB_ENTRY(arrayof_jlong_disjoint_arraycopy) :
|
STUB_ENTRY(arrayof_jlong_disjoint_arraycopy) :
|
||||||
STUB_ENTRY(jlong_disjoint_arraycopy);
|
STUB_ENTRY(jlong_disjoint_arraycopy);
|
||||||
@ -1885,7 +1896,7 @@ class StubGenerator: public StubCodeGenerator {
|
|||||||
StubCodeMark mark(this, "StubRoutines", name);
|
StubCodeMark mark(this, "StubRoutines", name);
|
||||||
|
|
||||||
address start = __ function_entry();
|
address start = __ function_entry();
|
||||||
|
assert_positive_int(R5_ARG3);
|
||||||
address nooverlap_target = aligned ?
|
address nooverlap_target = aligned ?
|
||||||
STUB_ENTRY(arrayof_oop_disjoint_arraycopy) :
|
STUB_ENTRY(arrayof_oop_disjoint_arraycopy) :
|
||||||
STUB_ENTRY(oop_disjoint_arraycopy);
|
STUB_ENTRY(oop_disjoint_arraycopy);
|
||||||
@ -1922,7 +1933,7 @@ class StubGenerator: public StubCodeGenerator {
|
|||||||
address generate_disjoint_oop_copy(bool aligned, const char * name, bool dest_uninitialized) {
|
address generate_disjoint_oop_copy(bool aligned, const char * name, bool dest_uninitialized) {
|
||||||
StubCodeMark mark(this, "StubRoutines", name);
|
StubCodeMark mark(this, "StubRoutines", name);
|
||||||
address start = __ function_entry();
|
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);
|
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.
|
// save some arguments, disjoint_long_copy_core destroys them.
|
||||||
@ -1996,7 +2007,24 @@ class StubGenerator: public StubCodeGenerator {
|
|||||||
StubCodeMark mark(this, "StubRoutines", name);
|
StubCodeMark mark(this, "StubRoutines", name);
|
||||||
address start = __ function_entry();
|
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);
|
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 @@ class StubGenerator: public StubCodeGenerator {
|
|||||||
STUB_ENTRY(checkcast_arraycopy));
|
STUB_ENTRY(checkcast_arraycopy));
|
||||||
|
|
||||||
// fill routines
|
// fill routines
|
||||||
StubRoutines::_jbyte_fill = generate_fill(T_BYTE, false, "jbyte_fill");
|
if (OptimizeFill) {
|
||||||
StubRoutines::_jshort_fill = generate_fill(T_SHORT, false, "jshort_fill");
|
StubRoutines::_jbyte_fill = generate_fill(T_BYTE, false, "jbyte_fill");
|
||||||
StubRoutines::_jint_fill = generate_fill(T_INT, false, "jint_fill");
|
StubRoutines::_jshort_fill = generate_fill(T_SHORT, false, "jshort_fill");
|
||||||
StubRoutines::_arrayof_jbyte_fill = generate_fill(T_BYTE, true, "arrayof_jbyte_fill");
|
StubRoutines::_jint_fill = generate_fill(T_INT, false, "jint_fill");
|
||||||
StubRoutines::_arrayof_jshort_fill = generate_fill(T_SHORT, true, "arrayof_jshort_fill");
|
StubRoutines::_arrayof_jbyte_fill = generate_fill(T_BYTE, true, "arrayof_jbyte_fill");
|
||||||
StubRoutines::_arrayof_jint_fill = generate_fill(T_INT, true, "arrayof_jint_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.
|
// Safefetch stubs.
|
||||||
@ -2535,6 +2565,11 @@ class StubGenerator: public StubCodeGenerator {
|
|||||||
|
|
||||||
BLOCK_COMMENT("Entry:");
|
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).
|
// Save non-volatile regs (frameless).
|
||||||
int current_offs = 8;
|
int current_offs = 8;
|
||||||
__ std(R24, -current_offs, R1_SP); current_offs += 8;
|
__ std(R24, -current_offs, R1_SP); current_offs += 8;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2015 SAP AG. All rights reserved.
|
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user