mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 23:04:50 +02:00
Merge
This commit is contained in:
commit
c3d91fec59
910 changed files with 41770 additions and 8799 deletions
4
.hgtags
4
.hgtags
|
@ -190,3 +190,7 @@ a2cf4d4a484378caea2e827ed604b2bbae58bdba jdk8-b65
|
||||||
17820b958ae84f7c1cc6719319c8e2232f7a4f1d jdk8-b66
|
17820b958ae84f7c1cc6719319c8e2232f7a4f1d jdk8-b66
|
||||||
76cc9bd3ece407d3a15d3bea537b57927973c5e7 jdk8-b67
|
76cc9bd3ece407d3a15d3bea537b57927973c5e7 jdk8-b67
|
||||||
cb33628d4e8f11e879c371959e5948b66a53376f jdk8-b68
|
cb33628d4e8f11e879c371959e5948b66a53376f jdk8-b68
|
||||||
|
adb5171c554e14cd86f618b5584f6e3d693d5889 jdk8-b69
|
||||||
|
0d625373c69e2ad6f546fd88ab50c6c9aad01271 jdk8-b70
|
||||||
|
a41ada2ed4ef735449531c6ebe6cec593d890a1c jdk8-b71
|
||||||
|
6725b3961f987cf40f446d1c11cd324a3bec545f jdk8-b72
|
||||||
|
|
|
@ -190,3 +190,7 @@ b772de306dc24c17f7bd1398531ddeb58723b804 jdk8-b65
|
||||||
13bb8c326e7b7b0b19d78c8088033e3932e3f7ca jdk8-b66
|
13bb8c326e7b7b0b19d78c8088033e3932e3f7ca jdk8-b66
|
||||||
9a6ec97ec45c1a62d5233cefa91e8390e380e13a jdk8-b67
|
9a6ec97ec45c1a62d5233cefa91e8390e380e13a jdk8-b67
|
||||||
cdb401a60cea6ad5ef3f498725ed1decf8dda1ea jdk8-b68
|
cdb401a60cea6ad5ef3f498725ed1decf8dda1ea jdk8-b68
|
||||||
|
6ee8080a6efe0639fcd00627a5e0f839bf010481 jdk8-b69
|
||||||
|
105a25ffa4a4f0af70188d4371b4a0385009b7ce jdk8-b70
|
||||||
|
51ad2a34342055333eb5f36e2fb514b027895708 jdk8-b71
|
||||||
|
c1be681d80a1f1c848dc671d664fccb19e046a12 jdk8-b72
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -60,28 +60,30 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_JVM_VARIANTS],
|
||||||
# Currently we have:
|
# Currently we have:
|
||||||
# server: normal interpreter and a tiered C1/C2 compiler
|
# server: normal interpreter and a tiered C1/C2 compiler
|
||||||
# client: normal interpreter and C1 (no C2 compiler) (only 32-bit platforms)
|
# client: normal interpreter and C1 (no C2 compiler) (only 32-bit platforms)
|
||||||
|
# minimal1: reduced form of client with optional VM services and features stripped out
|
||||||
# kernel: kernel footprint JVM that passes the TCK without major performance problems,
|
# kernel: kernel footprint JVM that passes the TCK without major performance problems,
|
||||||
# ie normal interpreter and C1, only the serial GC, kernel jvmti etc
|
# ie normal interpreter and C1, only the serial GC, kernel jvmti etc
|
||||||
# zero: no machine code interpreter, no compiler
|
# zero: no machine code interpreter, no compiler
|
||||||
# zeroshark: zero interpreter and shark/llvm compiler backend
|
# zeroshark: zero interpreter and shark/llvm compiler backend
|
||||||
AC_MSG_CHECKING([which variants of the JVM to build])
|
AC_MSG_CHECKING([which variants of the JVM to build])
|
||||||
AC_ARG_WITH([jvm-variants], [AS_HELP_STRING([--with-jvm-variants],
|
AC_ARG_WITH([jvm-variants], [AS_HELP_STRING([--with-jvm-variants],
|
||||||
[JVM variants (separated by commas) to build (server, client, kernel, zero, zeroshark) @<:@server@:>@])])
|
[JVM variants (separated by commas) to build (server, client, minimal1, kernel, zero, zeroshark) @<:@server@:>@])])
|
||||||
|
|
||||||
if test "x$with_jvm_variants" = x; then
|
if test "x$with_jvm_variants" = x; then
|
||||||
with_jvm_variants="server"
|
with_jvm_variants="server"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
JVM_VARIANTS=",$with_jvm_variants,"
|
JVM_VARIANTS=",$with_jvm_variants,"
|
||||||
TEST_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,//' -e 's/client,//' -e 's/kernel,//' -e 's/zero,//' -e 's/zeroshark,//'`
|
TEST_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,//' -e 's/client,//' -e 's/minimal1,//' -e 's/kernel,//' -e 's/zero,//' -e 's/zeroshark,//'`
|
||||||
|
|
||||||
if test "x$TEST_VARIANTS" != "x,"; then
|
if test "x$TEST_VARIANTS" != "x,"; then
|
||||||
AC_MSG_ERROR([The available JVM variants are: server, client, kernel, zero, zeroshark])
|
AC_MSG_ERROR([The available JVM variants are: server, client, minimal1, kernel, zero, zeroshark])
|
||||||
fi
|
fi
|
||||||
AC_MSG_RESULT([$with_jvm_variants])
|
AC_MSG_RESULT([$with_jvm_variants])
|
||||||
|
|
||||||
JVM_VARIANT_SERVER=`$ECHO "$JVM_VARIANTS" | $SED -e '/,server,/!s/.*/false/g' -e '/,server,/s/.*/true/g'`
|
JVM_VARIANT_SERVER=`$ECHO "$JVM_VARIANTS" | $SED -e '/,server,/!s/.*/false/g' -e '/,server,/s/.*/true/g'`
|
||||||
JVM_VARIANT_CLIENT=`$ECHO "$JVM_VARIANTS" | $SED -e '/,client,/!s/.*/false/g' -e '/,client,/s/.*/true/g'`
|
JVM_VARIANT_CLIENT=`$ECHO "$JVM_VARIANTS" | $SED -e '/,client,/!s/.*/false/g' -e '/,client,/s/.*/true/g'`
|
||||||
|
JVM_VARIANT_MINIMAL1=`$ECHO "$JVM_VARIANTS" | $SED -e '/,minimal1,/!s/.*/false/g' -e '/,minimal1,/s/.*/true/g'`
|
||||||
JVM_VARIANT_KERNEL=`$ECHO "$JVM_VARIANTS" | $SED -e '/,kernel,/!s/.*/false/g' -e '/,kernel,/s/.*/true/g'`
|
JVM_VARIANT_KERNEL=`$ECHO "$JVM_VARIANTS" | $SED -e '/,kernel,/!s/.*/false/g' -e '/,kernel,/s/.*/true/g'`
|
||||||
JVM_VARIANT_ZERO=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zero,/!s/.*/false/g' -e '/,zero,/s/.*/true/g'`
|
JVM_VARIANT_ZERO=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zero,/!s/.*/false/g' -e '/,zero,/s/.*/true/g'`
|
||||||
JVM_VARIANT_ZEROSHARK=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zeroshark,/!s/.*/false/g' -e '/,zeroshark,/s/.*/true/g'`
|
JVM_VARIANT_ZEROSHARK=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zeroshark,/!s/.*/false/g' -e '/,zeroshark,/s/.*/true/g'`
|
||||||
|
@ -96,10 +98,15 @@ if test "x$JVM_VARIANT_KERNEL" = xtrue; then
|
||||||
AC_MSG_ERROR([You cannot build a kernel JVM for a 64-bit machine.])
|
AC_MSG_ERROR([You cannot build a kernel JVM for a 64-bit machine.])
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
if test "x$JVM_VARIANT_MINIMAL1" = xtrue; then
|
||||||
|
if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
|
||||||
|
AC_MSG_ERROR([You cannot build a minimal JVM for a 64-bit machine.])
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# Replace the commas with AND for use in the build directory name.
|
# Replace the commas with AND for use in the build directory name.
|
||||||
ANDED_JVM_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/^,//' -e 's/,$//' -e 's/,/AND/'`
|
ANDED_JVM_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/^,//' -e 's/,$//' -e 's/,/AND/'`
|
||||||
COUNT_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,/1/' -e 's/client,/1/' -e 's/kernel,/1/' -e 's/zero,/1/' -e 's/zeroshark,/1/'`
|
COUNT_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,/1/' -e 's/client,/1/' -e 's/minimal1,/1/' -e 's/kernel,/1/' -e 's/zero,/1/' -e 's/zeroshark,/1/'`
|
||||||
if test "x$COUNT_VARIANTS" != "x,1"; then
|
if test "x$COUNT_VARIANTS" != "x,1"; then
|
||||||
BUILDING_MULTIPLE_JVM_VARIANTS=yes
|
BUILDING_MULTIPLE_JVM_VARIANTS=yes
|
||||||
else
|
else
|
||||||
|
@ -109,6 +116,7 @@ fi
|
||||||
AC_SUBST(JVM_VARIANTS)
|
AC_SUBST(JVM_VARIANTS)
|
||||||
AC_SUBST(JVM_VARIANT_SERVER)
|
AC_SUBST(JVM_VARIANT_SERVER)
|
||||||
AC_SUBST(JVM_VARIANT_CLIENT)
|
AC_SUBST(JVM_VARIANT_CLIENT)
|
||||||
|
AC_SUBST(JVM_VARIANT_MINIMAL1)
|
||||||
AC_SUBST(JVM_VARIANT_KERNEL)
|
AC_SUBST(JVM_VARIANT_KERNEL)
|
||||||
AC_SUBST(JVM_VARIANT_ZERO)
|
AC_SUBST(JVM_VARIANT_ZERO)
|
||||||
AC_SUBST(JVM_VARIANT_ZEROSHARK)
|
AC_SUBST(JVM_VARIANT_ZEROSHARK)
|
||||||
|
@ -191,7 +199,9 @@ esac
|
||||||
#####
|
#####
|
||||||
# Generate the legacy makefile targets for hotspot.
|
# Generate the legacy makefile targets for hotspot.
|
||||||
# The hotspot api for selecting the build artifacts, really, needs to be improved.
|
# The hotspot api for selecting the build artifacts, really, needs to be improved.
|
||||||
#
|
# JDK-7195896 will fix this on the hotspot side by using the JVM_VARIANT_* variables to
|
||||||
|
# determine what needs to be built. All we will need to set here is all_product, all_fastdebug etc
|
||||||
|
# But until then ...
|
||||||
HOTSPOT_TARGET=""
|
HOTSPOT_TARGET=""
|
||||||
|
|
||||||
if test "x$JVM_VARIANT_SERVER" = xtrue; then
|
if test "x$JVM_VARIANT_SERVER" = xtrue; then
|
||||||
|
@ -202,6 +212,10 @@ if test "x$JVM_VARIANT_CLIENT" = xtrue; then
|
||||||
HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}1 "
|
HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}1 "
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if test "x$JVM_VARIANT_MINIMAL1" = xtrue; then
|
||||||
|
HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}minimal1 "
|
||||||
|
fi
|
||||||
|
|
||||||
if test "x$JVM_VARIANT_KERNEL" = xtrue; then
|
if test "x$JVM_VARIANT_KERNEL" = xtrue; then
|
||||||
HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}kernel "
|
HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}kernel "
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -185,11 +185,12 @@ SUPPORT_HEADLESS:=@SUPPORT_HEADLESS@
|
||||||
|
|
||||||
# These are the libjvms that we want to build.
|
# These are the libjvms that we want to build.
|
||||||
# The java launcher uses the default.
|
# The java launcher uses the default.
|
||||||
# The other can be selected by specifying -client -server -kernel -zero or -zeroshark
|
# The others can be selected by specifying -client -server -minimal1 -kernel -zero or -zeroshark
|
||||||
# on the java launcher command line.
|
# on the java launcher command line.
|
||||||
JVM_VARIANTS:=@JVM_VARIANTS@
|
JVM_VARIANTS:=@JVM_VARIANTS@
|
||||||
JVM_VARIANT_SERVER:=@JVM_VARIANT_SERVER@
|
JVM_VARIANT_SERVER:=@JVM_VARIANT_SERVER@
|
||||||
JVM_VARIANT_CLIENT:=@JVM_VARIANT_CLIENT@
|
JVM_VARIANT_CLIENT:=@JVM_VARIANT_CLIENT@
|
||||||
|
JVM_VARIANT_MINIMAL1:=@JVM_VARIANT_MINIMAL1@
|
||||||
JVM_VARIANT_KERNEL:=@JVM_VARIANT_KERNEL@
|
JVM_VARIANT_KERNEL:=@JVM_VARIANT_KERNEL@
|
||||||
JVM_VARIANT_ZERO:=@JVM_VARIANT_ZERO@
|
JVM_VARIANT_ZERO:=@JVM_VARIANT_ZERO@
|
||||||
JVM_VARIANT_ZEROSHARK:=@JVM_VARIANT_ZEROSHARK@
|
JVM_VARIANT_ZEROSHARK:=@JVM_VARIANT_ZEROSHARK@
|
||||||
|
|
|
@ -954,11 +954,14 @@ else
|
||||||
|
|
||||||
# On some platforms (mac) the linker warns about non existing -L dirs.
|
# On some platforms (mac) the linker warns about non existing -L dirs.
|
||||||
# Add server first if available. Linking aginst client does not always produce the same results.
|
# Add server first if available. Linking aginst client does not always produce the same results.
|
||||||
# Only add client dir if client is being built. Default to server for other variants.
|
# Only add client dir if client is being built. Add minimal (note not minimal1) if only building minimal1.
|
||||||
|
# Default to server for other variants.
|
||||||
if test "x$JVM_VARIANT_SERVER" = xtrue; then
|
if test "x$JVM_VARIANT_SERVER" = xtrue; then
|
||||||
LDFLAGS_JDKLIB="${LDFLAGS_JDKLIB} -L${JDK_OUTPUTDIR}/lib${OPENJDK_TARGET_CPU_LIBDIR}/server"
|
LDFLAGS_JDKLIB="${LDFLAGS_JDKLIB} -L${JDK_OUTPUTDIR}/lib${OPENJDK_TARGET_CPU_LIBDIR}/server"
|
||||||
elif test "x$JVM_VARIANT_CLIENT" = xtrue; then
|
elif test "x$JVM_VARIANT_CLIENT" = xtrue; then
|
||||||
LDFLAGS_JDKLIB="${LDFLAGS_JDKLIB} -L${JDK_OUTPUTDIR}/lib${OPENJDK_TARGET_CPU_LIBDIR}/client"
|
LDFLAGS_JDKLIB="${LDFLAGS_JDKLIB} -L${JDK_OUTPUTDIR}/lib${OPENJDK_TARGET_CPU_LIBDIR}/client"
|
||||||
|
elif test "x$JVM_VARIANT_MINIMAL1" = xtrue; then
|
||||||
|
LDFLAGS_JDKLIB="${LDFLAGS_JDKLIB} -L${JDK_OUTPUTDIR}/lib${OPENJDK_TARGET_CPU_LIBDIR}/minimal"
|
||||||
else
|
else
|
||||||
LDFLAGS_JDKLIB="${LDFLAGS_JDKLIB} -L${JDK_OUTPUTDIR}/lib${OPENJDK_TARGET_CPU_LIBDIR}/server"
|
LDFLAGS_JDKLIB="${LDFLAGS_JDKLIB} -L${JDK_OUTPUTDIR}/lib${OPENJDK_TARGET_CPU_LIBDIR}/server"
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -80,6 +80,7 @@ ACCEPTED_BIN_DIFF="
|
||||||
./bin/javadoc
|
./bin/javadoc
|
||||||
./bin/javah
|
./bin/javah
|
||||||
./bin/javap
|
./bin/javap
|
||||||
|
./bin/jdeps
|
||||||
./bin/jcmd
|
./bin/jcmd
|
||||||
./bin/jconsole
|
./bin/jconsole
|
||||||
./bin/jdb
|
./bin/jdb
|
||||||
|
@ -167,6 +168,7 @@ ACCEPTED_BIN_DIFF="
|
||||||
./bin/javadoc
|
./bin/javadoc
|
||||||
./bin/javah
|
./bin/javah
|
||||||
./bin/javap
|
./bin/javap
|
||||||
|
./bin/jdeps
|
||||||
./bin/jcmd
|
./bin/jcmd
|
||||||
./bin/jconsole
|
./bin/jconsole
|
||||||
./bin/jdb
|
./bin/jdb
|
||||||
|
@ -309,6 +311,7 @@ ACCEPTED_SMALL_SIZE_DIFF="
|
||||||
./bin/javadoc
|
./bin/javadoc
|
||||||
./bin/javah
|
./bin/javah
|
||||||
./bin/javap
|
./bin/javap
|
||||||
|
./bin/jdeps
|
||||||
./bin/javaws
|
./bin/javaws
|
||||||
./bin/jcmd
|
./bin/jcmd
|
||||||
./bin/jconsole
|
./bin/jconsole
|
||||||
|
@ -449,6 +452,7 @@ ACCEPTED_SMALL_SIZE_DIFF="
|
||||||
./bin/amd64/javadoc
|
./bin/amd64/javadoc
|
||||||
./bin/amd64/javah
|
./bin/amd64/javah
|
||||||
./bin/amd64/javap
|
./bin/amd64/javap
|
||||||
|
./bin/amd64/jdeps
|
||||||
./bin/amd64/jcmd
|
./bin/amd64/jcmd
|
||||||
./bin/amd64/jconsole
|
./bin/amd64/jconsole
|
||||||
./bin/amd64/jdb
|
./bin/amd64/jdb
|
||||||
|
@ -606,6 +610,7 @@ ACCEPTED_SMALL_SIZE_DIFF="
|
||||||
./bin/javadoc
|
./bin/javadoc
|
||||||
./bin/javah
|
./bin/javah
|
||||||
./bin/javap
|
./bin/javap
|
||||||
|
./bin/jdeps
|
||||||
./bin/javaws
|
./bin/javaws
|
||||||
./bin/jcmd
|
./bin/jcmd
|
||||||
./bin/jconsole
|
./bin/jconsole
|
||||||
|
@ -751,6 +756,7 @@ ACCEPTED_SMALL_SIZE_DIFF="
|
||||||
./bin/sparcv9/javadoc
|
./bin/sparcv9/javadoc
|
||||||
./bin/sparcv9/javah
|
./bin/sparcv9/javah
|
||||||
./bin/sparcv9/javap
|
./bin/sparcv9/javap
|
||||||
|
./bin/sparcv9/jdeps
|
||||||
./bin/sparcv9/jcmd
|
./bin/sparcv9/jcmd
|
||||||
./bin/sparcv9/jconsole
|
./bin/sparcv9/jconsole
|
||||||
./bin/sparcv9/jdb
|
./bin/sparcv9/jdb
|
||||||
|
@ -826,6 +832,7 @@ ACCEPTED_SMALL_SIZE_DIFF="
|
||||||
./bin/javadoc.exe
|
./bin/javadoc.exe
|
||||||
./bin/javah.exe
|
./bin/javah.exe
|
||||||
./bin/javap.exe
|
./bin/javap.exe
|
||||||
|
./bin/jdeps.exe
|
||||||
./bin/javaw.exe
|
./bin/javaw.exe
|
||||||
./bin/jcmd.exe
|
./bin/jcmd.exe
|
||||||
./bin/jconsole.exe
|
./bin/jconsole.exe
|
||||||
|
@ -910,6 +917,7 @@ ACCEPTED_BIN_DIFF="
|
||||||
./bin/javadoc
|
./bin/javadoc
|
||||||
./bin/javah
|
./bin/javah
|
||||||
./bin/javap
|
./bin/javap
|
||||||
|
./bin/jdeps
|
||||||
./bin/jcmd
|
./bin/jcmd
|
||||||
./bin/jconsole
|
./bin/jconsole
|
||||||
./bin/jdb
|
./bin/jdb
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (c) 2011, 2012 Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 2011, 2012, Oracle and/or its affiliates. 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
|
||||||
|
|
|
@ -78,7 +78,8 @@ ATTACH_PKGS = com.sun.tools.attach \
|
||||||
|
|
||||||
JCONSOLE_PKGS = com.sun.tools.jconsole
|
JCONSOLE_PKGS = com.sun.tools.jconsole
|
||||||
|
|
||||||
TREEAPI_PKGS = com.sun.source.tree \
|
TREEAPI_PKGS = com.sun.source.doctree \
|
||||||
|
com.sun.source.tree \
|
||||||
com.sun.source.util
|
com.sun.source.util
|
||||||
|
|
||||||
SMARTCARDIO_PKGS = javax.smartcardio
|
SMARTCARDIO_PKGS = javax.smartcardio
|
||||||
|
|
|
@ -190,3 +190,7 @@ d54dc53e223ed9ce7d5f4d2cd02ad9d5def3c2db jdk8-b59
|
||||||
65771ad1ca557ca26e4979d4dc633cf685435cb8 jdk8-b66
|
65771ad1ca557ca26e4979d4dc633cf685435cb8 jdk8-b66
|
||||||
394515ad2a55d4d54df990b36065505d3e7a3cbb jdk8-b67
|
394515ad2a55d4d54df990b36065505d3e7a3cbb jdk8-b67
|
||||||
82000531feaa7baef76b6406099e5cd88943d635 jdk8-b68
|
82000531feaa7baef76b6406099e5cd88943d635 jdk8-b68
|
||||||
|
22ddcac208a8dea894a16887d04f3ca4d3c5d267 jdk8-b69
|
||||||
|
603cceb495c8133d47b26a7502d51c7d8a67d76b jdk8-b70
|
||||||
|
8171d23e914d758836527b80b06debcfdb718f2d jdk8-b71
|
||||||
|
cb40427f47145b01b7e53c3e02b38ff7625efbda jdk8-b72
|
||||||
|
|
|
@ -303,3 +303,7 @@ a35a72dd2e1255239d31f796f9f693e49b36bc9f hs25-b12
|
||||||
b6c9c0109a608eedbb6b868d260952990e3c91fe hs25-b13
|
b6c9c0109a608eedbb6b868d260952990e3c91fe hs25-b13
|
||||||
cb8a4e04bc8c104de8a2f67463c7e31232bf8d68 jdk8-b69
|
cb8a4e04bc8c104de8a2f67463c7e31232bf8d68 jdk8-b69
|
||||||
990bbd393c239d95310ccc38094e57923bbf1d4a hs25-b14
|
990bbd393c239d95310ccc38094e57923bbf1d4a hs25-b14
|
||||||
|
e94068d4ff52849c8aa0786a53a59b63d1312a39 jdk8-b70
|
||||||
|
0847210f85480bf3848dc90bc2ab23c0a4791b55 jdk8-b71
|
||||||
|
d5cb5830f570d1304ea4b196dde672a291b55f29 jdk8-b72
|
||||||
|
1e129851479e4f5df439109fca2c7be1f1613522 hs25-b15
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2012 Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2012, Oracle and/or its affiliates. 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
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
* have any questions.
|
* questions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2012, Oracle and/or its affiliates. All Rights Reserved.
|
* Copyright (c) 2012, Oracle and/or its affiliates. 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,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 2006, 2013, Oracle and/or its affiliates. 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
|
||||||
|
@ -31,11 +31,11 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
# Don't put quotes (fail windows build).
|
# Don't put quotes (fail windows build).
|
||||||
HOTSPOT_VM_COPYRIGHT=Copyright 2012
|
HOTSPOT_VM_COPYRIGHT=Copyright 2013
|
||||||
|
|
||||||
HS_MAJOR_VER=25
|
HS_MAJOR_VER=25
|
||||||
HS_MINOR_VER=0
|
HS_MINOR_VER=0
|
||||||
HS_BUILD_NUMBER=15
|
HS_BUILD_NUMBER=16
|
||||||
|
|
||||||
JDK_MAJOR_VER=1
|
JDK_MAJOR_VER=1
|
||||||
JDK_MINOR_VER=8
|
JDK_MINOR_VER=8
|
||||||
|
|
|
@ -675,8 +675,8 @@ public:
|
||||||
AbstractAssembler::flush();
|
AbstractAssembler::flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void emit_long(int); // shadows AbstractAssembler::emit_long
|
inline void emit_int32(int); // shadows AbstractAssembler::emit_int32
|
||||||
inline void emit_data(int x) { emit_long(x); }
|
inline void emit_data(int x) { emit_int32(x); }
|
||||||
inline void emit_data(int, RelocationHolder const&);
|
inline void emit_data(int, RelocationHolder const&);
|
||||||
inline void emit_data(int, relocInfo::relocType rtype);
|
inline void emit_data(int, relocInfo::relocType rtype);
|
||||||
// helper for above fcns
|
// helper for above fcns
|
||||||
|
@ -691,12 +691,12 @@ public:
|
||||||
inline void add(Register s1, Register s2, Register d );
|
inline void add(Register s1, Register s2, Register d );
|
||||||
inline void add(Register s1, int simm13a, Register d );
|
inline void add(Register s1, int simm13a, Register d );
|
||||||
|
|
||||||
void addcc( Register s1, Register s2, Register d ) { emit_long( op(arith_op) | rd(d) | op3(add_op3 | cc_bit_op3) | rs1(s1) | rs2(s2) ); }
|
void addcc( Register s1, Register s2, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(add_op3 | cc_bit_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
void addcc( Register s1, int simm13a, Register d ) { emit_long( op(arith_op) | rd(d) | op3(add_op3 | cc_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void addcc( Register s1, int simm13a, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(add_op3 | cc_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
void addc( Register s1, Register s2, Register d ) { emit_long( op(arith_op) | rd(d) | op3(addc_op3 ) | rs1(s1) | rs2(s2) ); }
|
void addc( Register s1, Register s2, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(addc_op3 ) | rs1(s1) | rs2(s2) ); }
|
||||||
void addc( Register s1, int simm13a, Register d ) { emit_long( op(arith_op) | rd(d) | op3(addc_op3 ) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void addc( Register s1, int simm13a, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(addc_op3 ) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
void addccc( Register s1, Register s2, Register d ) { emit_long( op(arith_op) | rd(d) | op3(addc_op3 | cc_bit_op3) | rs1(s1) | rs2(s2) ); }
|
void addccc( Register s1, Register s2, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(addc_op3 | cc_bit_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
void addccc( Register s1, int simm13a, Register d ) { emit_long( op(arith_op) | rd(d) | op3(addc_op3 | cc_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void addccc( Register s1, int simm13a, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(addc_op3 | cc_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
|
|
||||||
|
|
||||||
// pp 136
|
// pp 136
|
||||||
|
@ -749,76 +749,76 @@ public:
|
||||||
// at address s1 is swapped with the data in d. If the values are not equal,
|
// at address s1 is swapped with the data in d. If the values are not equal,
|
||||||
// the the contents of memory at s1 is loaded into d, without the swap.
|
// the the contents of memory at s1 is loaded into d, without the swap.
|
||||||
|
|
||||||
void casa( Register s1, Register s2, Register d, int ia = -1 ) { v9_only(); emit_long( op(ldst_op) | rd(d) | op3(casa_op3 ) | rs1(s1) | (ia == -1 ? immed(true) : imm_asi(ia)) | rs2(s2)); }
|
void casa( Register s1, Register s2, Register d, int ia = -1 ) { v9_only(); emit_int32( op(ldst_op) | rd(d) | op3(casa_op3 ) | rs1(s1) | (ia == -1 ? immed(true) : imm_asi(ia)) | rs2(s2)); }
|
||||||
void casxa( Register s1, Register s2, Register d, int ia = -1 ) { v9_only(); emit_long( op(ldst_op) | rd(d) | op3(casxa_op3) | rs1(s1) | (ia == -1 ? immed(true) : imm_asi(ia)) | rs2(s2)); }
|
void casxa( Register s1, Register s2, Register d, int ia = -1 ) { v9_only(); emit_int32( op(ldst_op) | rd(d) | op3(casxa_op3) | rs1(s1) | (ia == -1 ? immed(true) : imm_asi(ia)) | rs2(s2)); }
|
||||||
|
|
||||||
// pp 152
|
// pp 152
|
||||||
|
|
||||||
void udiv( Register s1, Register s2, Register d ) { emit_long( op(arith_op) | rd(d) | op3(udiv_op3 ) | rs1(s1) | rs2(s2)); }
|
void udiv( Register s1, Register s2, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(udiv_op3 ) | rs1(s1) | rs2(s2)); }
|
||||||
void udiv( Register s1, int simm13a, Register d ) { emit_long( op(arith_op) | rd(d) | op3(udiv_op3 ) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void udiv( Register s1, int simm13a, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(udiv_op3 ) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
void sdiv( Register s1, Register s2, Register d ) { emit_long( op(arith_op) | rd(d) | op3(sdiv_op3 ) | rs1(s1) | rs2(s2)); }
|
void sdiv( Register s1, Register s2, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(sdiv_op3 ) | rs1(s1) | rs2(s2)); }
|
||||||
void sdiv( Register s1, int simm13a, Register d ) { emit_long( op(arith_op) | rd(d) | op3(sdiv_op3 ) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void sdiv( Register s1, int simm13a, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(sdiv_op3 ) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
void udivcc( Register s1, Register s2, Register d ) { emit_long( op(arith_op) | rd(d) | op3(udiv_op3 | cc_bit_op3) | rs1(s1) | rs2(s2)); }
|
void udivcc( Register s1, Register s2, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(udiv_op3 | cc_bit_op3) | rs1(s1) | rs2(s2)); }
|
||||||
void udivcc( Register s1, int simm13a, Register d ) { emit_long( op(arith_op) | rd(d) | op3(udiv_op3 | cc_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void udivcc( Register s1, int simm13a, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(udiv_op3 | cc_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
void sdivcc( Register s1, Register s2, Register d ) { emit_long( op(arith_op) | rd(d) | op3(sdiv_op3 | cc_bit_op3) | rs1(s1) | rs2(s2)); }
|
void sdivcc( Register s1, Register s2, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(sdiv_op3 | cc_bit_op3) | rs1(s1) | rs2(s2)); }
|
||||||
void sdivcc( Register s1, int simm13a, Register d ) { emit_long( op(arith_op) | rd(d) | op3(sdiv_op3 | cc_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void sdivcc( Register s1, int simm13a, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(sdiv_op3 | cc_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
|
|
||||||
// pp 155
|
// pp 155
|
||||||
|
|
||||||
void done() { v9_only(); cti(); emit_long( op(arith_op) | fcn(0) | op3(done_op3) ); }
|
void done() { v9_only(); cti(); emit_int32( op(arith_op) | fcn(0) | op3(done_op3) ); }
|
||||||
void retry() { v9_only(); cti(); emit_long( op(arith_op) | fcn(1) | op3(retry_op3) ); }
|
void retry() { v9_only(); cti(); emit_int32( op(arith_op) | fcn(1) | op3(retry_op3) ); }
|
||||||
|
|
||||||
// pp 156
|
// pp 156
|
||||||
|
|
||||||
void fadd( FloatRegisterImpl::Width w, FloatRegister s1, FloatRegister s2, FloatRegister d ) { emit_long( op(arith_op) | fd(d, w) | op3(fpop1_op3) | fs1(s1, w) | opf(0x40 + w) | fs2(s2, w)); }
|
void fadd( FloatRegisterImpl::Width w, FloatRegister s1, FloatRegister s2, FloatRegister d ) { emit_int32( op(arith_op) | fd(d, w) | op3(fpop1_op3) | fs1(s1, w) | opf(0x40 + w) | fs2(s2, w)); }
|
||||||
void fsub( FloatRegisterImpl::Width w, FloatRegister s1, FloatRegister s2, FloatRegister d ) { emit_long( op(arith_op) | fd(d, w) | op3(fpop1_op3) | fs1(s1, w) | opf(0x44 + w) | fs2(s2, w)); }
|
void fsub( FloatRegisterImpl::Width w, FloatRegister s1, FloatRegister s2, FloatRegister d ) { emit_int32( op(arith_op) | fd(d, w) | op3(fpop1_op3) | fs1(s1, w) | opf(0x44 + w) | fs2(s2, w)); }
|
||||||
|
|
||||||
// pp 157
|
// pp 157
|
||||||
|
|
||||||
void fcmp( FloatRegisterImpl::Width w, CC cc, FloatRegister s1, FloatRegister s2) { v8_no_cc(cc); emit_long( op(arith_op) | cmpcc(cc) | op3(fpop2_op3) | fs1(s1, w) | opf(0x50 + w) | fs2(s2, w)); }
|
void fcmp( FloatRegisterImpl::Width w, CC cc, FloatRegister s1, FloatRegister s2) { v8_no_cc(cc); emit_int32( op(arith_op) | cmpcc(cc) | op3(fpop2_op3) | fs1(s1, w) | opf(0x50 + w) | fs2(s2, w)); }
|
||||||
void fcmpe( FloatRegisterImpl::Width w, CC cc, FloatRegister s1, FloatRegister s2) { v8_no_cc(cc); emit_long( op(arith_op) | cmpcc(cc) | op3(fpop2_op3) | fs1(s1, w) | opf(0x54 + w) | fs2(s2, w)); }
|
void fcmpe( FloatRegisterImpl::Width w, CC cc, FloatRegister s1, FloatRegister s2) { v8_no_cc(cc); emit_int32( op(arith_op) | cmpcc(cc) | op3(fpop2_op3) | fs1(s1, w) | opf(0x54 + w) | fs2(s2, w)); }
|
||||||
|
|
||||||
// pp 159
|
// pp 159
|
||||||
|
|
||||||
void ftox( FloatRegisterImpl::Width w, FloatRegister s, FloatRegister d ) { v9_only(); emit_long( op(arith_op) | fd(d, FloatRegisterImpl::D) | op3(fpop1_op3) | opf(0x80 + w) | fs2(s, w)); }
|
void ftox( FloatRegisterImpl::Width w, FloatRegister s, FloatRegister d ) { v9_only(); emit_int32( op(arith_op) | fd(d, FloatRegisterImpl::D) | op3(fpop1_op3) | opf(0x80 + w) | fs2(s, w)); }
|
||||||
void ftoi( FloatRegisterImpl::Width w, FloatRegister s, FloatRegister d ) { emit_long( op(arith_op) | fd(d, FloatRegisterImpl::S) | op3(fpop1_op3) | opf(0xd0 + w) | fs2(s, w)); }
|
void ftoi( FloatRegisterImpl::Width w, FloatRegister s, FloatRegister d ) { emit_int32( op(arith_op) | fd(d, FloatRegisterImpl::S) | op3(fpop1_op3) | opf(0xd0 + w) | fs2(s, w)); }
|
||||||
|
|
||||||
// pp 160
|
// pp 160
|
||||||
|
|
||||||
void ftof( FloatRegisterImpl::Width sw, FloatRegisterImpl::Width dw, FloatRegister s, FloatRegister d ) { emit_long( op(arith_op) | fd(d, dw) | op3(fpop1_op3) | opf(0xc0 + sw + dw*4) | fs2(s, sw)); }
|
void ftof( FloatRegisterImpl::Width sw, FloatRegisterImpl::Width dw, FloatRegister s, FloatRegister d ) { emit_int32( op(arith_op) | fd(d, dw) | op3(fpop1_op3) | opf(0xc0 + sw + dw*4) | fs2(s, sw)); }
|
||||||
|
|
||||||
// pp 161
|
// pp 161
|
||||||
|
|
||||||
void fxtof( FloatRegisterImpl::Width w, FloatRegister s, FloatRegister d ) { v9_only(); emit_long( op(arith_op) | fd(d, w) | op3(fpop1_op3) | opf(0x80 + w*4) | fs2(s, FloatRegisterImpl::D)); }
|
void fxtof( FloatRegisterImpl::Width w, FloatRegister s, FloatRegister d ) { v9_only(); emit_int32( op(arith_op) | fd(d, w) | op3(fpop1_op3) | opf(0x80 + w*4) | fs2(s, FloatRegisterImpl::D)); }
|
||||||
void fitof( FloatRegisterImpl::Width w, FloatRegister s, FloatRegister d ) { emit_long( op(arith_op) | fd(d, w) | op3(fpop1_op3) | opf(0xc0 + w*4) | fs2(s, FloatRegisterImpl::S)); }
|
void fitof( FloatRegisterImpl::Width w, FloatRegister s, FloatRegister d ) { emit_int32( op(arith_op) | fd(d, w) | op3(fpop1_op3) | opf(0xc0 + w*4) | fs2(s, FloatRegisterImpl::S)); }
|
||||||
|
|
||||||
// pp 162
|
// pp 162
|
||||||
|
|
||||||
void fmov( FloatRegisterImpl::Width w, FloatRegister s, FloatRegister d ) { v8_s_only(w); emit_long( op(arith_op) | fd(d, w) | op3(fpop1_op3) | opf(0x00 + w) | fs2(s, w)); }
|
void fmov( FloatRegisterImpl::Width w, FloatRegister s, FloatRegister d ) { v8_s_only(w); emit_int32( op(arith_op) | fd(d, w) | op3(fpop1_op3) | opf(0x00 + w) | fs2(s, w)); }
|
||||||
|
|
||||||
void fneg( FloatRegisterImpl::Width w, FloatRegister s, FloatRegister d ) { v8_s_only(w); emit_long( op(arith_op) | fd(d, w) | op3(fpop1_op3) | opf(0x04 + w) | fs2(s, w)); }
|
void fneg( FloatRegisterImpl::Width w, FloatRegister s, FloatRegister d ) { v8_s_only(w); emit_int32( op(arith_op) | fd(d, w) | op3(fpop1_op3) | opf(0x04 + w) | fs2(s, w)); }
|
||||||
|
|
||||||
// page 144 sparc v8 architecture (double prec works on v8 if the source and destination registers are the same). fnegs is the only instruction available
|
// page 144 sparc v8 architecture (double prec works on v8 if the source and destination registers are the same). fnegs is the only instruction available
|
||||||
// on v8 to do negation of single, double and quad precision floats.
|
// on v8 to do negation of single, double and quad precision floats.
|
||||||
|
|
||||||
void fneg( FloatRegisterImpl::Width w, FloatRegister sd ) { if (VM_Version::v9_instructions_work()) emit_long( op(arith_op) | fd(sd, w) | op3(fpop1_op3) | opf(0x04 + w) | fs2(sd, w)); else emit_long( op(arith_op) | fd(sd, w) | op3(fpop1_op3) | opf(0x05) | fs2(sd, w)); }
|
void fneg( FloatRegisterImpl::Width w, FloatRegister sd ) { if (VM_Version::v9_instructions_work()) emit_int32( op(arith_op) | fd(sd, w) | op3(fpop1_op3) | opf(0x04 + w) | fs2(sd, w)); else emit_int32( op(arith_op) | fd(sd, w) | op3(fpop1_op3) | opf(0x05) | fs2(sd, w)); }
|
||||||
|
|
||||||
void fabs( FloatRegisterImpl::Width w, FloatRegister s, FloatRegister d ) { v8_s_only(w); emit_long( op(arith_op) | fd(d, w) | op3(fpop1_op3) | opf(0x08 + w) | fs2(s, w)); }
|
void fabs( FloatRegisterImpl::Width w, FloatRegister s, FloatRegister d ) { v8_s_only(w); emit_int32( op(arith_op) | fd(d, w) | op3(fpop1_op3) | opf(0x08 + w) | fs2(s, w)); }
|
||||||
|
|
||||||
// page 144 sparc v8 architecture (double prec works on v8 if the source and destination registers are the same). fabss is the only instruction available
|
// page 144 sparc v8 architecture (double prec works on v8 if the source and destination registers are the same). fabss is the only instruction available
|
||||||
// on v8 to do abs operation on single/double/quad precision floats.
|
// on v8 to do abs operation on single/double/quad precision floats.
|
||||||
|
|
||||||
void fabs( FloatRegisterImpl::Width w, FloatRegister sd ) { if (VM_Version::v9_instructions_work()) emit_long( op(arith_op) | fd(sd, w) | op3(fpop1_op3) | opf(0x08 + w) | fs2(sd, w)); else emit_long( op(arith_op) | fd(sd, w) | op3(fpop1_op3) | opf(0x09) | fs2(sd, w)); }
|
void fabs( FloatRegisterImpl::Width w, FloatRegister sd ) { if (VM_Version::v9_instructions_work()) emit_int32( op(arith_op) | fd(sd, w) | op3(fpop1_op3) | opf(0x08 + w) | fs2(sd, w)); else emit_int32( op(arith_op) | fd(sd, w) | op3(fpop1_op3) | opf(0x09) | fs2(sd, w)); }
|
||||||
|
|
||||||
// pp 163
|
// pp 163
|
||||||
|
|
||||||
void fmul( FloatRegisterImpl::Width w, FloatRegister s1, FloatRegister s2, FloatRegister d ) { emit_long( op(arith_op) | fd(d, w) | op3(fpop1_op3) | fs1(s1, w) | opf(0x48 + w) | fs2(s2, w)); }
|
void fmul( FloatRegisterImpl::Width w, FloatRegister s1, FloatRegister s2, FloatRegister d ) { emit_int32( op(arith_op) | fd(d, w) | op3(fpop1_op3) | fs1(s1, w) | opf(0x48 + w) | fs2(s2, w)); }
|
||||||
void fmul( FloatRegisterImpl::Width sw, FloatRegisterImpl::Width dw, FloatRegister s1, FloatRegister s2, FloatRegister d ) { emit_long( op(arith_op) | fd(d, dw) | op3(fpop1_op3) | fs1(s1, sw) | opf(0x60 + sw + dw*4) | fs2(s2, sw)); }
|
void fmul( FloatRegisterImpl::Width sw, FloatRegisterImpl::Width dw, FloatRegister s1, FloatRegister s2, FloatRegister d ) { emit_int32( op(arith_op) | fd(d, dw) | op3(fpop1_op3) | fs1(s1, sw) | opf(0x60 + sw + dw*4) | fs2(s2, sw)); }
|
||||||
void fdiv( FloatRegisterImpl::Width w, FloatRegister s1, FloatRegister s2, FloatRegister d ) { emit_long( op(arith_op) | fd(d, w) | op3(fpop1_op3) | fs1(s1, w) | opf(0x4c + w) | fs2(s2, w)); }
|
void fdiv( FloatRegisterImpl::Width w, FloatRegister s1, FloatRegister s2, FloatRegister d ) { emit_int32( op(arith_op) | fd(d, w) | op3(fpop1_op3) | fs1(s1, w) | opf(0x4c + w) | fs2(s2, w)); }
|
||||||
|
|
||||||
// pp 164
|
// pp 164
|
||||||
|
|
||||||
void fsqrt( FloatRegisterImpl::Width w, FloatRegister s, FloatRegister d ) { emit_long( op(arith_op) | fd(d, w) | op3(fpop1_op3) | opf(0x28 + w) | fs2(s, w)); }
|
void fsqrt( FloatRegisterImpl::Width w, FloatRegister s, FloatRegister d ) { emit_int32( op(arith_op) | fd(d, w) | op3(fpop1_op3) | opf(0x28 + w) | fs2(s, w)); }
|
||||||
|
|
||||||
// pp 165
|
// pp 165
|
||||||
|
|
||||||
|
@ -827,22 +827,22 @@ public:
|
||||||
|
|
||||||
// pp 167
|
// pp 167
|
||||||
|
|
||||||
void flushw() { v9_only(); emit_long( op(arith_op) | op3(flushw_op3) ); }
|
void flushw() { v9_only(); emit_int32( op(arith_op) | op3(flushw_op3) ); }
|
||||||
|
|
||||||
// pp 168
|
// pp 168
|
||||||
|
|
||||||
void illtrap( int const22a) { if (const22a != 0) v9_only(); emit_long( op(branch_op) | u_field(const22a, 21, 0) ); }
|
void illtrap( int const22a) { if (const22a != 0) v9_only(); emit_int32( op(branch_op) | u_field(const22a, 21, 0) ); }
|
||||||
// v8 unimp == illtrap(0)
|
// v8 unimp == illtrap(0)
|
||||||
|
|
||||||
// pp 169
|
// pp 169
|
||||||
|
|
||||||
void impdep1( int id1, int const19a ) { v9_only(); emit_long( op(arith_op) | fcn(id1) | op3(impdep1_op3) | u_field(const19a, 18, 0)); }
|
void impdep1( int id1, int const19a ) { v9_only(); emit_int32( op(arith_op) | fcn(id1) | op3(impdep1_op3) | u_field(const19a, 18, 0)); }
|
||||||
void impdep2( int id1, int const19a ) { v9_only(); emit_long( op(arith_op) | fcn(id1) | op3(impdep2_op3) | u_field(const19a, 18, 0)); }
|
void impdep2( int id1, int const19a ) { v9_only(); emit_int32( op(arith_op) | fcn(id1) | op3(impdep2_op3) | u_field(const19a, 18, 0)); }
|
||||||
|
|
||||||
// pp 149 (v8)
|
// pp 149 (v8)
|
||||||
|
|
||||||
void cpop1( int opc, int cr1, int cr2, int crd ) { v8_only(); emit_long( op(arith_op) | fcn(crd) | op3(impdep1_op3) | u_field(cr1, 18, 14) | opf(opc) | u_field(cr2, 4, 0)); }
|
void cpop1( int opc, int cr1, int cr2, int crd ) { v8_only(); emit_int32( op(arith_op) | fcn(crd) | op3(impdep1_op3) | u_field(cr1, 18, 14) | opf(opc) | u_field(cr2, 4, 0)); }
|
||||||
void cpop2( int opc, int cr1, int cr2, int crd ) { v8_only(); emit_long( op(arith_op) | fcn(crd) | op3(impdep2_op3) | u_field(cr1, 18, 14) | opf(opc) | u_field(cr2, 4, 0)); }
|
void cpop2( int opc, int cr1, int cr2, int crd ) { v8_only(); emit_int32( op(arith_op) | fcn(crd) | op3(impdep2_op3) | u_field(cr1, 18, 14) | opf(opc) | u_field(cr2, 4, 0)); }
|
||||||
|
|
||||||
// pp 170
|
// pp 170
|
||||||
|
|
||||||
|
@ -872,8 +872,8 @@ public:
|
||||||
|
|
||||||
// 173
|
// 173
|
||||||
|
|
||||||
void ldfa( FloatRegisterImpl::Width w, Register s1, Register s2, int ia, FloatRegister d ) { v9_only(); emit_long( op(ldst_op) | fd(d, w) | alt_op3(ldf_op3 | alt_bit_op3, w) | rs1(s1) | imm_asi(ia) | rs2(s2) ); }
|
void ldfa( FloatRegisterImpl::Width w, Register s1, Register s2, int ia, FloatRegister d ) { v9_only(); emit_int32( op(ldst_op) | fd(d, w) | alt_op3(ldf_op3 | alt_bit_op3, w) | rs1(s1) | imm_asi(ia) | rs2(s2) ); }
|
||||||
void ldfa( FloatRegisterImpl::Width w, Register s1, int simm13a, FloatRegister d ) { v9_only(); emit_long( op(ldst_op) | fd(d, w) | alt_op3(ldf_op3 | alt_bit_op3, w) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void ldfa( FloatRegisterImpl::Width w, Register s1, int simm13a, FloatRegister d ) { v9_only(); emit_int32( op(ldst_op) | fd(d, w) | alt_op3(ldf_op3 | alt_bit_op3, w) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
|
|
||||||
// pp 175, lduw is ld on v8
|
// pp 175, lduw is ld on v8
|
||||||
|
|
||||||
|
@ -896,22 +896,22 @@ public:
|
||||||
|
|
||||||
// pp 177
|
// pp 177
|
||||||
|
|
||||||
void ldsba( Register s1, Register s2, int ia, Register d ) { emit_long( op(ldst_op) | rd(d) | op3(ldsb_op3 | alt_bit_op3) | rs1(s1) | imm_asi(ia) | rs2(s2) ); }
|
void ldsba( Register s1, Register s2, int ia, Register d ) { emit_int32( op(ldst_op) | rd(d) | op3(ldsb_op3 | alt_bit_op3) | rs1(s1) | imm_asi(ia) | rs2(s2) ); }
|
||||||
void ldsba( Register s1, int simm13a, Register d ) { emit_long( op(ldst_op) | rd(d) | op3(ldsb_op3 | alt_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void ldsba( Register s1, int simm13a, Register d ) { emit_int32( op(ldst_op) | rd(d) | op3(ldsb_op3 | alt_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
void ldsha( Register s1, Register s2, int ia, Register d ) { emit_long( op(ldst_op) | rd(d) | op3(ldsh_op3 | alt_bit_op3) | rs1(s1) | imm_asi(ia) | rs2(s2) ); }
|
void ldsha( Register s1, Register s2, int ia, Register d ) { emit_int32( op(ldst_op) | rd(d) | op3(ldsh_op3 | alt_bit_op3) | rs1(s1) | imm_asi(ia) | rs2(s2) ); }
|
||||||
void ldsha( Register s1, int simm13a, Register d ) { emit_long( op(ldst_op) | rd(d) | op3(ldsh_op3 | alt_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void ldsha( Register s1, int simm13a, Register d ) { emit_int32( op(ldst_op) | rd(d) | op3(ldsh_op3 | alt_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
void ldswa( Register s1, Register s2, int ia, Register d ) { v9_only(); emit_long( op(ldst_op) | rd(d) | op3(ldsw_op3 | alt_bit_op3) | rs1(s1) | imm_asi(ia) | rs2(s2) ); }
|
void ldswa( Register s1, Register s2, int ia, Register d ) { v9_only(); emit_int32( op(ldst_op) | rd(d) | op3(ldsw_op3 | alt_bit_op3) | rs1(s1) | imm_asi(ia) | rs2(s2) ); }
|
||||||
void ldswa( Register s1, int simm13a, Register d ) { v9_only(); emit_long( op(ldst_op) | rd(d) | op3(ldsw_op3 | alt_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void ldswa( Register s1, int simm13a, Register d ) { v9_only(); emit_int32( op(ldst_op) | rd(d) | op3(ldsw_op3 | alt_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
void lduba( Register s1, Register s2, int ia, Register d ) { emit_long( op(ldst_op) | rd(d) | op3(ldub_op3 | alt_bit_op3) | rs1(s1) | imm_asi(ia) | rs2(s2) ); }
|
void lduba( Register s1, Register s2, int ia, Register d ) { emit_int32( op(ldst_op) | rd(d) | op3(ldub_op3 | alt_bit_op3) | rs1(s1) | imm_asi(ia) | rs2(s2) ); }
|
||||||
void lduba( Register s1, int simm13a, Register d ) { emit_long( op(ldst_op) | rd(d) | op3(ldub_op3 | alt_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void lduba( Register s1, int simm13a, Register d ) { emit_int32( op(ldst_op) | rd(d) | op3(ldub_op3 | alt_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
void lduha( Register s1, Register s2, int ia, Register d ) { emit_long( op(ldst_op) | rd(d) | op3(lduh_op3 | alt_bit_op3) | rs1(s1) | imm_asi(ia) | rs2(s2) ); }
|
void lduha( Register s1, Register s2, int ia, Register d ) { emit_int32( op(ldst_op) | rd(d) | op3(lduh_op3 | alt_bit_op3) | rs1(s1) | imm_asi(ia) | rs2(s2) ); }
|
||||||
void lduha( Register s1, int simm13a, Register d ) { emit_long( op(ldst_op) | rd(d) | op3(lduh_op3 | alt_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void lduha( Register s1, int simm13a, Register d ) { emit_int32( op(ldst_op) | rd(d) | op3(lduh_op3 | alt_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
void lduwa( Register s1, Register s2, int ia, Register d ) { emit_long( op(ldst_op) | rd(d) | op3(lduw_op3 | alt_bit_op3) | rs1(s1) | imm_asi(ia) | rs2(s2) ); }
|
void lduwa( Register s1, Register s2, int ia, Register d ) { emit_int32( op(ldst_op) | rd(d) | op3(lduw_op3 | alt_bit_op3) | rs1(s1) | imm_asi(ia) | rs2(s2) ); }
|
||||||
void lduwa( Register s1, int simm13a, Register d ) { emit_long( op(ldst_op) | rd(d) | op3(lduw_op3 | alt_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void lduwa( Register s1, int simm13a, Register d ) { emit_int32( op(ldst_op) | rd(d) | op3(lduw_op3 | alt_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
void ldxa( Register s1, Register s2, int ia, Register d ) { v9_only(); emit_long( op(ldst_op) | rd(d) | op3(ldx_op3 | alt_bit_op3) | rs1(s1) | imm_asi(ia) | rs2(s2) ); }
|
void ldxa( Register s1, Register s2, int ia, Register d ) { v9_only(); emit_int32( op(ldst_op) | rd(d) | op3(ldx_op3 | alt_bit_op3) | rs1(s1) | imm_asi(ia) | rs2(s2) ); }
|
||||||
void ldxa( Register s1, int simm13a, Register d ) { v9_only(); emit_long( op(ldst_op) | rd(d) | op3(ldx_op3 | alt_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void ldxa( Register s1, int simm13a, Register d ) { v9_only(); emit_int32( op(ldst_op) | rd(d) | op3(ldx_op3 | alt_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
void ldda( Register s1, Register s2, int ia, Register d ) { v9_dep(); emit_long( op(ldst_op) | rd(d) | op3(ldd_op3 | alt_bit_op3) | rs1(s1) | imm_asi(ia) | rs2(s2) ); }
|
void ldda( Register s1, Register s2, int ia, Register d ) { v9_dep(); emit_int32( op(ldst_op) | rd(d) | op3(ldd_op3 | alt_bit_op3) | rs1(s1) | imm_asi(ia) | rs2(s2) ); }
|
||||||
void ldda( Register s1, int simm13a, Register d ) { v9_dep(); emit_long( op(ldst_op) | rd(d) | op3(ldd_op3 | alt_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void ldda( Register s1, int simm13a, Register d ) { v9_dep(); emit_int32( op(ldst_op) | rd(d) | op3(ldd_op3 | alt_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
|
|
||||||
// pp 179
|
// pp 179
|
||||||
|
|
||||||
|
@ -920,111 +920,111 @@ public:
|
||||||
|
|
||||||
// pp 180
|
// pp 180
|
||||||
|
|
||||||
void ldstuba( Register s1, Register s2, int ia, Register d ) { emit_long( op(ldst_op) | rd(d) | op3(ldstub_op3 | alt_bit_op3) | rs1(s1) | imm_asi(ia) | rs2(s2) ); }
|
void ldstuba( Register s1, Register s2, int ia, Register d ) { emit_int32( op(ldst_op) | rd(d) | op3(ldstub_op3 | alt_bit_op3) | rs1(s1) | imm_asi(ia) | rs2(s2) ); }
|
||||||
void ldstuba( Register s1, int simm13a, Register d ) { emit_long( op(ldst_op) | rd(d) | op3(ldstub_op3 | alt_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void ldstuba( Register s1, int simm13a, Register d ) { emit_int32( op(ldst_op) | rd(d) | op3(ldstub_op3 | alt_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
|
|
||||||
// pp 181
|
// pp 181
|
||||||
|
|
||||||
void and3( Register s1, Register s2, Register d ) { emit_long( op(arith_op) | rd(d) | op3(and_op3 ) | rs1(s1) | rs2(s2) ); }
|
void and3( Register s1, Register s2, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(and_op3 ) | rs1(s1) | rs2(s2) ); }
|
||||||
void and3( Register s1, int simm13a, Register d ) { emit_long( op(arith_op) | rd(d) | op3(and_op3 ) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void and3( Register s1, int simm13a, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(and_op3 ) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
void andcc( Register s1, Register s2, Register d ) { emit_long( op(arith_op) | rd(d) | op3(and_op3 | cc_bit_op3) | rs1(s1) | rs2(s2) ); }
|
void andcc( Register s1, Register s2, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(and_op3 | cc_bit_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
void andcc( Register s1, int simm13a, Register d ) { emit_long( op(arith_op) | rd(d) | op3(and_op3 | cc_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void andcc( Register s1, int simm13a, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(and_op3 | cc_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
void andn( Register s1, Register s2, Register d ) { emit_long( op(arith_op) | rd(d) | op3(andn_op3 ) | rs1(s1) | rs2(s2) ); }
|
void andn( Register s1, Register s2, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(andn_op3 ) | rs1(s1) | rs2(s2) ); }
|
||||||
void andn( Register s1, int simm13a, Register d ) { emit_long( op(arith_op) | rd(d) | op3(andn_op3 ) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void andn( Register s1, int simm13a, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(andn_op3 ) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
void andncc( Register s1, Register s2, Register d ) { emit_long( op(arith_op) | rd(d) | op3(andn_op3 | cc_bit_op3) | rs1(s1) | rs2(s2) ); }
|
void andncc( Register s1, Register s2, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(andn_op3 | cc_bit_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
void andncc( Register s1, int simm13a, Register d ) { emit_long( op(arith_op) | rd(d) | op3(andn_op3 | cc_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void andncc( Register s1, int simm13a, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(andn_op3 | cc_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
void or3( Register s1, Register s2, Register d ) { emit_long( op(arith_op) | rd(d) | op3(or_op3 ) | rs1(s1) | rs2(s2) ); }
|
void or3( Register s1, Register s2, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(or_op3 ) | rs1(s1) | rs2(s2) ); }
|
||||||
void or3( Register s1, int simm13a, Register d ) { emit_long( op(arith_op) | rd(d) | op3(or_op3 ) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void or3( Register s1, int simm13a, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(or_op3 ) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
void orcc( Register s1, Register s2, Register d ) { emit_long( op(arith_op) | rd(d) | op3(or_op3 | cc_bit_op3) | rs1(s1) | rs2(s2) ); }
|
void orcc( Register s1, Register s2, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(or_op3 | cc_bit_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
void orcc( Register s1, int simm13a, Register d ) { emit_long( op(arith_op) | rd(d) | op3(or_op3 | cc_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void orcc( Register s1, int simm13a, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(or_op3 | cc_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
void orn( Register s1, Register s2, Register d ) { emit_long( op(arith_op) | rd(d) | op3(orn_op3) | rs1(s1) | rs2(s2) ); }
|
void orn( Register s1, Register s2, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(orn_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
void orn( Register s1, int simm13a, Register d ) { emit_long( op(arith_op) | rd(d) | op3(orn_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void orn( Register s1, int simm13a, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(orn_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
void orncc( Register s1, Register s2, Register d ) { emit_long( op(arith_op) | rd(d) | op3(orn_op3 | cc_bit_op3) | rs1(s1) | rs2(s2) ); }
|
void orncc( Register s1, Register s2, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(orn_op3 | cc_bit_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
void orncc( Register s1, int simm13a, Register d ) { emit_long( op(arith_op) | rd(d) | op3(orn_op3 | cc_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void orncc( Register s1, int simm13a, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(orn_op3 | cc_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
void xor3( Register s1, Register s2, Register d ) { emit_long( op(arith_op) | rd(d) | op3(xor_op3 ) | rs1(s1) | rs2(s2) ); }
|
void xor3( Register s1, Register s2, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(xor_op3 ) | rs1(s1) | rs2(s2) ); }
|
||||||
void xor3( Register s1, int simm13a, Register d ) { emit_long( op(arith_op) | rd(d) | op3(xor_op3 ) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void xor3( Register s1, int simm13a, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(xor_op3 ) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
void xorcc( Register s1, Register s2, Register d ) { emit_long( op(arith_op) | rd(d) | op3(xor_op3 | cc_bit_op3) | rs1(s1) | rs2(s2) ); }
|
void xorcc( Register s1, Register s2, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(xor_op3 | cc_bit_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
void xorcc( Register s1, int simm13a, Register d ) { emit_long( op(arith_op) | rd(d) | op3(xor_op3 | cc_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void xorcc( Register s1, int simm13a, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(xor_op3 | cc_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
void xnor( Register s1, Register s2, Register d ) { emit_long( op(arith_op) | rd(d) | op3(xnor_op3 ) | rs1(s1) | rs2(s2) ); }
|
void xnor( Register s1, Register s2, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(xnor_op3 ) | rs1(s1) | rs2(s2) ); }
|
||||||
void xnor( Register s1, int simm13a, Register d ) { emit_long( op(arith_op) | rd(d) | op3(xnor_op3 ) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void xnor( Register s1, int simm13a, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(xnor_op3 ) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
void xnorcc( Register s1, Register s2, Register d ) { emit_long( op(arith_op) | rd(d) | op3(xnor_op3 | cc_bit_op3) | rs1(s1) | rs2(s2) ); }
|
void xnorcc( Register s1, Register s2, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(xnor_op3 | cc_bit_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
void xnorcc( Register s1, int simm13a, Register d ) { emit_long( op(arith_op) | rd(d) | op3(xnor_op3 | cc_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void xnorcc( Register s1, int simm13a, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(xnor_op3 | cc_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
|
|
||||||
// pp 183
|
// pp 183
|
||||||
|
|
||||||
void membar( Membar_mask_bits const7a ) { v9_only(); emit_long( op(arith_op) | op3(membar_op3) | rs1(O7) | immed(true) | u_field( int(const7a), 6, 0)); }
|
void membar( Membar_mask_bits const7a ) { v9_only(); emit_int32( op(arith_op) | op3(membar_op3) | rs1(O7) | immed(true) | u_field( int(const7a), 6, 0)); }
|
||||||
|
|
||||||
// pp 185
|
// pp 185
|
||||||
|
|
||||||
void fmov( FloatRegisterImpl::Width w, Condition c, bool floatCC, CC cca, FloatRegister s2, FloatRegister d ) { v9_only(); emit_long( op(arith_op) | fd(d, w) | op3(fpop2_op3) | cond_mov(c) | opf_cc(cca, floatCC) | opf_low6(w) | fs2(s2, w)); }
|
void fmov( FloatRegisterImpl::Width w, Condition c, bool floatCC, CC cca, FloatRegister s2, FloatRegister d ) { v9_only(); emit_int32( op(arith_op) | fd(d, w) | op3(fpop2_op3) | cond_mov(c) | opf_cc(cca, floatCC) | opf_low6(w) | fs2(s2, w)); }
|
||||||
|
|
||||||
// pp 189
|
// pp 189
|
||||||
|
|
||||||
void fmov( FloatRegisterImpl::Width w, RCondition c, Register s1, FloatRegister s2, FloatRegister d ) { v9_only(); emit_long( op(arith_op) | fd(d, w) | op3(fpop2_op3) | rs1(s1) | rcond(c) | opf_low5(4 + w) | fs2(s2, w)); }
|
void fmov( FloatRegisterImpl::Width w, RCondition c, Register s1, FloatRegister s2, FloatRegister d ) { v9_only(); emit_int32( op(arith_op) | fd(d, w) | op3(fpop2_op3) | rs1(s1) | rcond(c) | opf_low5(4 + w) | fs2(s2, w)); }
|
||||||
|
|
||||||
// pp 191
|
// pp 191
|
||||||
|
|
||||||
void movcc( Condition c, bool floatCC, CC cca, Register s2, Register d ) { v9_only(); emit_long( op(arith_op) | rd(d) | op3(movcc_op3) | mov_cc(cca, floatCC) | cond_mov(c) | rs2(s2) ); }
|
void movcc( Condition c, bool floatCC, CC cca, Register s2, Register d ) { v9_only(); emit_int32( op(arith_op) | rd(d) | op3(movcc_op3) | mov_cc(cca, floatCC) | cond_mov(c) | rs2(s2) ); }
|
||||||
void movcc( Condition c, bool floatCC, CC cca, int simm11a, Register d ) { v9_only(); emit_long( op(arith_op) | rd(d) | op3(movcc_op3) | mov_cc(cca, floatCC) | cond_mov(c) | immed(true) | simm(simm11a, 11) ); }
|
void movcc( Condition c, bool floatCC, CC cca, int simm11a, Register d ) { v9_only(); emit_int32( op(arith_op) | rd(d) | op3(movcc_op3) | mov_cc(cca, floatCC) | cond_mov(c) | immed(true) | simm(simm11a, 11) ); }
|
||||||
|
|
||||||
// pp 195
|
// pp 195
|
||||||
|
|
||||||
void movr( RCondition c, Register s1, Register s2, Register d ) { v9_only(); emit_long( op(arith_op) | rd(d) | op3(movr_op3) | rs1(s1) | rcond(c) | rs2(s2) ); }
|
void movr( RCondition c, Register s1, Register s2, Register d ) { v9_only(); emit_int32( op(arith_op) | rd(d) | op3(movr_op3) | rs1(s1) | rcond(c) | rs2(s2) ); }
|
||||||
void movr( RCondition c, Register s1, int simm10a, Register d ) { v9_only(); emit_long( op(arith_op) | rd(d) | op3(movr_op3) | rs1(s1) | rcond(c) | immed(true) | simm(simm10a, 10) ); }
|
void movr( RCondition c, Register s1, int simm10a, Register d ) { v9_only(); emit_int32( op(arith_op) | rd(d) | op3(movr_op3) | rs1(s1) | rcond(c) | immed(true) | simm(simm10a, 10) ); }
|
||||||
|
|
||||||
// pp 196
|
// pp 196
|
||||||
|
|
||||||
void mulx( Register s1, Register s2, Register d ) { v9_only(); emit_long( op(arith_op) | rd(d) | op3(mulx_op3 ) | rs1(s1) | rs2(s2) ); }
|
void mulx( Register s1, Register s2, Register d ) { v9_only(); emit_int32( op(arith_op) | rd(d) | op3(mulx_op3 ) | rs1(s1) | rs2(s2) ); }
|
||||||
void mulx( Register s1, int simm13a, Register d ) { v9_only(); emit_long( op(arith_op) | rd(d) | op3(mulx_op3 ) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void mulx( Register s1, int simm13a, Register d ) { v9_only(); emit_int32( op(arith_op) | rd(d) | op3(mulx_op3 ) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
void sdivx( Register s1, Register s2, Register d ) { v9_only(); emit_long( op(arith_op) | rd(d) | op3(sdivx_op3) | rs1(s1) | rs2(s2) ); }
|
void sdivx( Register s1, Register s2, Register d ) { v9_only(); emit_int32( op(arith_op) | rd(d) | op3(sdivx_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
void sdivx( Register s1, int simm13a, Register d ) { v9_only(); emit_long( op(arith_op) | rd(d) | op3(sdivx_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void sdivx( Register s1, int simm13a, Register d ) { v9_only(); emit_int32( op(arith_op) | rd(d) | op3(sdivx_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
void udivx( Register s1, Register s2, Register d ) { v9_only(); emit_long( op(arith_op) | rd(d) | op3(udivx_op3) | rs1(s1) | rs2(s2) ); }
|
void udivx( Register s1, Register s2, Register d ) { v9_only(); emit_int32( op(arith_op) | rd(d) | op3(udivx_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
void udivx( Register s1, int simm13a, Register d ) { v9_only(); emit_long( op(arith_op) | rd(d) | op3(udivx_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void udivx( Register s1, int simm13a, Register d ) { v9_only(); emit_int32( op(arith_op) | rd(d) | op3(udivx_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
|
|
||||||
// pp 197
|
// pp 197
|
||||||
|
|
||||||
void umul( Register s1, Register s2, Register d ) { emit_long( op(arith_op) | rd(d) | op3(umul_op3 ) | rs1(s1) | rs2(s2) ); }
|
void umul( Register s1, Register s2, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(umul_op3 ) | rs1(s1) | rs2(s2) ); }
|
||||||
void umul( Register s1, int simm13a, Register d ) { emit_long( op(arith_op) | rd(d) | op3(umul_op3 ) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void umul( Register s1, int simm13a, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(umul_op3 ) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
void smul( Register s1, Register s2, Register d ) { emit_long( op(arith_op) | rd(d) | op3(smul_op3 ) | rs1(s1) | rs2(s2) ); }
|
void smul( Register s1, Register s2, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(smul_op3 ) | rs1(s1) | rs2(s2) ); }
|
||||||
void smul( Register s1, int simm13a, Register d ) { emit_long( op(arith_op) | rd(d) | op3(smul_op3 ) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void smul( Register s1, int simm13a, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(smul_op3 ) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
void umulcc( Register s1, Register s2, Register d ) { emit_long( op(arith_op) | rd(d) | op3(umul_op3 | cc_bit_op3) | rs1(s1) | rs2(s2) ); }
|
void umulcc( Register s1, Register s2, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(umul_op3 | cc_bit_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
void umulcc( Register s1, int simm13a, Register d ) { emit_long( op(arith_op) | rd(d) | op3(umul_op3 | cc_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void umulcc( Register s1, int simm13a, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(umul_op3 | cc_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
void smulcc( Register s1, Register s2, Register d ) { emit_long( op(arith_op) | rd(d) | op3(smul_op3 | cc_bit_op3) | rs1(s1) | rs2(s2) ); }
|
void smulcc( Register s1, Register s2, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(smul_op3 | cc_bit_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
void smulcc( Register s1, int simm13a, Register d ) { emit_long( op(arith_op) | rd(d) | op3(smul_op3 | cc_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void smulcc( Register s1, int simm13a, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(smul_op3 | cc_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
|
|
||||||
// pp 199
|
// pp 199
|
||||||
|
|
||||||
void mulscc( Register s1, Register s2, Register d ) { v9_dep(); emit_long( op(arith_op) | rd(d) | op3(mulscc_op3) | rs1(s1) | rs2(s2) ); }
|
void mulscc( Register s1, Register s2, Register d ) { v9_dep(); emit_int32( op(arith_op) | rd(d) | op3(mulscc_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
void mulscc( Register s1, int simm13a, Register d ) { v9_dep(); emit_long( op(arith_op) | rd(d) | op3(mulscc_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void mulscc( Register s1, int simm13a, Register d ) { v9_dep(); emit_int32( op(arith_op) | rd(d) | op3(mulscc_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
|
|
||||||
// pp 201
|
// pp 201
|
||||||
|
|
||||||
void nop() { emit_long( op(branch_op) | op2(sethi_op2) ); }
|
void nop() { emit_int32( op(branch_op) | op2(sethi_op2) ); }
|
||||||
|
|
||||||
|
|
||||||
// pp 202
|
// pp 202
|
||||||
|
|
||||||
void popc( Register s, Register d) { v9_only(); emit_long( op(arith_op) | rd(d) | op3(popc_op3) | rs2(s)); }
|
void popc( Register s, Register d) { v9_only(); emit_int32( op(arith_op) | rd(d) | op3(popc_op3) | rs2(s)); }
|
||||||
void popc( int simm13a, Register d) { v9_only(); emit_long( op(arith_op) | rd(d) | op3(popc_op3) | immed(true) | simm(simm13a, 13)); }
|
void popc( int simm13a, Register d) { v9_only(); emit_int32( op(arith_op) | rd(d) | op3(popc_op3) | immed(true) | simm(simm13a, 13)); }
|
||||||
|
|
||||||
// pp 203
|
// pp 203
|
||||||
|
|
||||||
void prefetch( Register s1, Register s2, PrefetchFcn f) { v9_only(); emit_long( op(ldst_op) | fcn(f) | op3(prefetch_op3) | rs1(s1) | rs2(s2) ); }
|
void prefetch( Register s1, Register s2, PrefetchFcn f) { v9_only(); emit_int32( op(ldst_op) | fcn(f) | op3(prefetch_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
void prefetch( Register s1, int simm13a, PrefetchFcn f) { v9_only(); emit_data( op(ldst_op) | fcn(f) | op3(prefetch_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
void prefetch( Register s1, int simm13a, PrefetchFcn f) { v9_only(); emit_data( op(ldst_op) | fcn(f) | op3(prefetch_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
||||||
|
|
||||||
void prefetcha( Register s1, Register s2, int ia, PrefetchFcn f ) { v9_only(); emit_long( op(ldst_op) | fcn(f) | op3(prefetch_op3 | alt_bit_op3) | rs1(s1) | imm_asi(ia) | rs2(s2) ); }
|
void prefetcha( Register s1, Register s2, int ia, PrefetchFcn f ) { v9_only(); emit_int32( op(ldst_op) | fcn(f) | op3(prefetch_op3 | alt_bit_op3) | rs1(s1) | imm_asi(ia) | rs2(s2) ); }
|
||||||
void prefetcha( Register s1, int simm13a, PrefetchFcn f ) { v9_only(); emit_long( op(ldst_op) | fcn(f) | op3(prefetch_op3 | alt_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void prefetcha( Register s1, int simm13a, PrefetchFcn f ) { v9_only(); emit_int32( op(ldst_op) | fcn(f) | op3(prefetch_op3 | alt_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
|
|
||||||
// pp 208
|
// pp 208
|
||||||
|
|
||||||
// not implementing read privileged register
|
// not implementing read privileged register
|
||||||
|
|
||||||
inline void rdy( Register d) { v9_dep(); emit_long( op(arith_op) | rd(d) | op3(rdreg_op3) | u_field(0, 18, 14)); }
|
inline void rdy( Register d) { v9_dep(); emit_int32( op(arith_op) | rd(d) | op3(rdreg_op3) | u_field(0, 18, 14)); }
|
||||||
inline void rdccr( Register d) { v9_only(); emit_long( op(arith_op) | rd(d) | op3(rdreg_op3) | u_field(2, 18, 14)); }
|
inline void rdccr( Register d) { v9_only(); emit_int32( op(arith_op) | rd(d) | op3(rdreg_op3) | u_field(2, 18, 14)); }
|
||||||
inline void rdasi( Register d) { v9_only(); emit_long( op(arith_op) | rd(d) | op3(rdreg_op3) | u_field(3, 18, 14)); }
|
inline void rdasi( Register d) { v9_only(); emit_int32( op(arith_op) | rd(d) | op3(rdreg_op3) | u_field(3, 18, 14)); }
|
||||||
inline void rdtick( Register d) { v9_only(); emit_long( op(arith_op) | rd(d) | op3(rdreg_op3) | u_field(4, 18, 14)); } // Spoon!
|
inline void rdtick( Register d) { v9_only(); emit_int32( op(arith_op) | rd(d) | op3(rdreg_op3) | u_field(4, 18, 14)); } // Spoon!
|
||||||
inline void rdpc( Register d) { v9_only(); emit_long( op(arith_op) | rd(d) | op3(rdreg_op3) | u_field(5, 18, 14)); }
|
inline void rdpc( Register d) { v9_only(); emit_int32( op(arith_op) | rd(d) | op3(rdreg_op3) | u_field(5, 18, 14)); }
|
||||||
inline void rdfprs( Register d) { v9_only(); emit_long( op(arith_op) | rd(d) | op3(rdreg_op3) | u_field(6, 18, 14)); }
|
inline void rdfprs( Register d) { v9_only(); emit_int32( op(arith_op) | rd(d) | op3(rdreg_op3) | u_field(6, 18, 14)); }
|
||||||
|
|
||||||
// pp 213
|
// pp 213
|
||||||
|
|
||||||
|
@ -1033,47 +1033,47 @@ public:
|
||||||
|
|
||||||
// pp 214
|
// pp 214
|
||||||
|
|
||||||
void save( Register s1, Register s2, Register d ) { emit_long( op(arith_op) | rd(d) | op3(save_op3) | rs1(s1) | rs2(s2) ); }
|
void save( Register s1, Register s2, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(save_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
void save( Register s1, int simm13a, Register d ) {
|
void save( Register s1, int simm13a, Register d ) {
|
||||||
// make sure frame is at least large enough for the register save area
|
// make sure frame is at least large enough for the register save area
|
||||||
assert(-simm13a >= 16 * wordSize, "frame too small");
|
assert(-simm13a >= 16 * wordSize, "frame too small");
|
||||||
emit_long( op(arith_op) | rd(d) | op3(save_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) );
|
emit_int32( op(arith_op) | rd(d) | op3(save_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) );
|
||||||
}
|
}
|
||||||
|
|
||||||
void restore( Register s1 = G0, Register s2 = G0, Register d = G0 ) { emit_long( op(arith_op) | rd(d) | op3(restore_op3) | rs1(s1) | rs2(s2) ); }
|
void restore( Register s1 = G0, Register s2 = G0, Register d = G0 ) { emit_int32( op(arith_op) | rd(d) | op3(restore_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
void restore( Register s1, int simm13a, Register d ) { emit_long( op(arith_op) | rd(d) | op3(restore_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void restore( Register s1, int simm13a, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(restore_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
|
|
||||||
// pp 216
|
// pp 216
|
||||||
|
|
||||||
void saved() { v9_only(); emit_long( op(arith_op) | fcn(0) | op3(saved_op3)); }
|
void saved() { v9_only(); emit_int32( op(arith_op) | fcn(0) | op3(saved_op3)); }
|
||||||
void restored() { v9_only(); emit_long( op(arith_op) | fcn(1) | op3(saved_op3)); }
|
void restored() { v9_only(); emit_int32( op(arith_op) | fcn(1) | op3(saved_op3)); }
|
||||||
|
|
||||||
// pp 217
|
// pp 217
|
||||||
|
|
||||||
inline void sethi( int imm22a, Register d, RelocationHolder const& rspec = RelocationHolder() );
|
inline void sethi( int imm22a, Register d, RelocationHolder const& rspec = RelocationHolder() );
|
||||||
// pp 218
|
// pp 218
|
||||||
|
|
||||||
void sll( Register s1, Register s2, Register d ) { emit_long( op(arith_op) | rd(d) | op3(sll_op3) | rs1(s1) | sx(0) | rs2(s2) ); }
|
void sll( Register s1, Register s2, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(sll_op3) | rs1(s1) | sx(0) | rs2(s2) ); }
|
||||||
void sll( Register s1, int imm5a, Register d ) { emit_long( op(arith_op) | rd(d) | op3(sll_op3) | rs1(s1) | sx(0) | immed(true) | u_field(imm5a, 4, 0) ); }
|
void sll( Register s1, int imm5a, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(sll_op3) | rs1(s1) | sx(0) | immed(true) | u_field(imm5a, 4, 0) ); }
|
||||||
void srl( Register s1, Register s2, Register d ) { emit_long( op(arith_op) | rd(d) | op3(srl_op3) | rs1(s1) | sx(0) | rs2(s2) ); }
|
void srl( Register s1, Register s2, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(srl_op3) | rs1(s1) | sx(0) | rs2(s2) ); }
|
||||||
void srl( Register s1, int imm5a, Register d ) { emit_long( op(arith_op) | rd(d) | op3(srl_op3) | rs1(s1) | sx(0) | immed(true) | u_field(imm5a, 4, 0) ); }
|
void srl( Register s1, int imm5a, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(srl_op3) | rs1(s1) | sx(0) | immed(true) | u_field(imm5a, 4, 0) ); }
|
||||||
void sra( Register s1, Register s2, Register d ) { emit_long( op(arith_op) | rd(d) | op3(sra_op3) | rs1(s1) | sx(0) | rs2(s2) ); }
|
void sra( Register s1, Register s2, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(sra_op3) | rs1(s1) | sx(0) | rs2(s2) ); }
|
||||||
void sra( Register s1, int imm5a, Register d ) { emit_long( op(arith_op) | rd(d) | op3(sra_op3) | rs1(s1) | sx(0) | immed(true) | u_field(imm5a, 4, 0) ); }
|
void sra( Register s1, int imm5a, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(sra_op3) | rs1(s1) | sx(0) | immed(true) | u_field(imm5a, 4, 0) ); }
|
||||||
|
|
||||||
void sllx( Register s1, Register s2, Register d ) { v9_only(); emit_long( op(arith_op) | rd(d) | op3(sll_op3) | rs1(s1) | sx(1) | rs2(s2) ); }
|
void sllx( Register s1, Register s2, Register d ) { v9_only(); emit_int32( op(arith_op) | rd(d) | op3(sll_op3) | rs1(s1) | sx(1) | rs2(s2) ); }
|
||||||
void sllx( Register s1, int imm6a, Register d ) { v9_only(); emit_long( op(arith_op) | rd(d) | op3(sll_op3) | rs1(s1) | sx(1) | immed(true) | u_field(imm6a, 5, 0) ); }
|
void sllx( Register s1, int imm6a, Register d ) { v9_only(); emit_int32( op(arith_op) | rd(d) | op3(sll_op3) | rs1(s1) | sx(1) | immed(true) | u_field(imm6a, 5, 0) ); }
|
||||||
void srlx( Register s1, Register s2, Register d ) { v9_only(); emit_long( op(arith_op) | rd(d) | op3(srl_op3) | rs1(s1) | sx(1) | rs2(s2) ); }
|
void srlx( Register s1, Register s2, Register d ) { v9_only(); emit_int32( op(arith_op) | rd(d) | op3(srl_op3) | rs1(s1) | sx(1) | rs2(s2) ); }
|
||||||
void srlx( Register s1, int imm6a, Register d ) { v9_only(); emit_long( op(arith_op) | rd(d) | op3(srl_op3) | rs1(s1) | sx(1) | immed(true) | u_field(imm6a, 5, 0) ); }
|
void srlx( Register s1, int imm6a, Register d ) { v9_only(); emit_int32( op(arith_op) | rd(d) | op3(srl_op3) | rs1(s1) | sx(1) | immed(true) | u_field(imm6a, 5, 0) ); }
|
||||||
void srax( Register s1, Register s2, Register d ) { v9_only(); emit_long( op(arith_op) | rd(d) | op3(sra_op3) | rs1(s1) | sx(1) | rs2(s2) ); }
|
void srax( Register s1, Register s2, Register d ) { v9_only(); emit_int32( op(arith_op) | rd(d) | op3(sra_op3) | rs1(s1) | sx(1) | rs2(s2) ); }
|
||||||
void srax( Register s1, int imm6a, Register d ) { v9_only(); emit_long( op(arith_op) | rd(d) | op3(sra_op3) | rs1(s1) | sx(1) | immed(true) | u_field(imm6a, 5, 0) ); }
|
void srax( Register s1, int imm6a, Register d ) { v9_only(); emit_int32( op(arith_op) | rd(d) | op3(sra_op3) | rs1(s1) | sx(1) | immed(true) | u_field(imm6a, 5, 0) ); }
|
||||||
|
|
||||||
// pp 220
|
// pp 220
|
||||||
|
|
||||||
void sir( int simm13a ) { emit_long( op(arith_op) | fcn(15) | op3(sir_op3) | immed(true) | simm(simm13a, 13)); }
|
void sir( int simm13a ) { emit_int32( op(arith_op) | fcn(15) | op3(sir_op3) | immed(true) | simm(simm13a, 13)); }
|
||||||
|
|
||||||
// pp 221
|
// pp 221
|
||||||
|
|
||||||
void stbar() { emit_long( op(arith_op) | op3(membar_op3) | u_field(15, 18, 14)); }
|
void stbar() { emit_int32( op(arith_op) | op3(membar_op3) | u_field(15, 18, 14)); }
|
||||||
|
|
||||||
// pp 222
|
// pp 222
|
||||||
|
|
||||||
|
@ -1087,8 +1087,8 @@ public:
|
||||||
|
|
||||||
// pp 224
|
// pp 224
|
||||||
|
|
||||||
void stfa( FloatRegisterImpl::Width w, FloatRegister d, Register s1, Register s2, int ia ) { v9_only(); emit_long( op(ldst_op) | fd(d, w) | alt_op3(stf_op3 | alt_bit_op3, w) | rs1(s1) | imm_asi(ia) | rs2(s2) ); }
|
void stfa( FloatRegisterImpl::Width w, FloatRegister d, Register s1, Register s2, int ia ) { v9_only(); emit_int32( op(ldst_op) | fd(d, w) | alt_op3(stf_op3 | alt_bit_op3, w) | rs1(s1) | imm_asi(ia) | rs2(s2) ); }
|
||||||
void stfa( FloatRegisterImpl::Width w, FloatRegister d, Register s1, int simm13a ) { v9_only(); emit_long( op(ldst_op) | fd(d, w) | alt_op3(stf_op3 | alt_bit_op3, w) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void stfa( FloatRegisterImpl::Width w, FloatRegister d, Register s1, int simm13a ) { v9_only(); emit_int32( op(ldst_op) | fd(d, w) | alt_op3(stf_op3 | alt_bit_op3, w) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
|
|
||||||
// p 226
|
// p 226
|
||||||
|
|
||||||
|
@ -1105,16 +1105,16 @@ public:
|
||||||
|
|
||||||
// pp 177
|
// pp 177
|
||||||
|
|
||||||
void stba( Register d, Register s1, Register s2, int ia ) { emit_long( op(ldst_op) | rd(d) | op3(stb_op3 | alt_bit_op3) | rs1(s1) | imm_asi(ia) | rs2(s2) ); }
|
void stba( Register d, Register s1, Register s2, int ia ) { emit_int32( op(ldst_op) | rd(d) | op3(stb_op3 | alt_bit_op3) | rs1(s1) | imm_asi(ia) | rs2(s2) ); }
|
||||||
void stba( Register d, Register s1, int simm13a ) { emit_long( op(ldst_op) | rd(d) | op3(stb_op3 | alt_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void stba( Register d, Register s1, int simm13a ) { emit_int32( op(ldst_op) | rd(d) | op3(stb_op3 | alt_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
void stha( Register d, Register s1, Register s2, int ia ) { emit_long( op(ldst_op) | rd(d) | op3(sth_op3 | alt_bit_op3) | rs1(s1) | imm_asi(ia) | rs2(s2) ); }
|
void stha( Register d, Register s1, Register s2, int ia ) { emit_int32( op(ldst_op) | rd(d) | op3(sth_op3 | alt_bit_op3) | rs1(s1) | imm_asi(ia) | rs2(s2) ); }
|
||||||
void stha( Register d, Register s1, int simm13a ) { emit_long( op(ldst_op) | rd(d) | op3(sth_op3 | alt_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void stha( Register d, Register s1, int simm13a ) { emit_int32( op(ldst_op) | rd(d) | op3(sth_op3 | alt_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
void stwa( Register d, Register s1, Register s2, int ia ) { emit_long( op(ldst_op) | rd(d) | op3(stw_op3 | alt_bit_op3) | rs1(s1) | imm_asi(ia) | rs2(s2) ); }
|
void stwa( Register d, Register s1, Register s2, int ia ) { emit_int32( op(ldst_op) | rd(d) | op3(stw_op3 | alt_bit_op3) | rs1(s1) | imm_asi(ia) | rs2(s2) ); }
|
||||||
void stwa( Register d, Register s1, int simm13a ) { emit_long( op(ldst_op) | rd(d) | op3(stw_op3 | alt_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void stwa( Register d, Register s1, int simm13a ) { emit_int32( op(ldst_op) | rd(d) | op3(stw_op3 | alt_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
void stxa( Register d, Register s1, Register s2, int ia ) { v9_only(); emit_long( op(ldst_op) | rd(d) | op3(stx_op3 | alt_bit_op3) | rs1(s1) | imm_asi(ia) | rs2(s2) ); }
|
void stxa( Register d, Register s1, Register s2, int ia ) { v9_only(); emit_int32( op(ldst_op) | rd(d) | op3(stx_op3 | alt_bit_op3) | rs1(s1) | imm_asi(ia) | rs2(s2) ); }
|
||||||
void stxa( Register d, Register s1, int simm13a ) { v9_only(); emit_long( op(ldst_op) | rd(d) | op3(stx_op3 | alt_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void stxa( Register d, Register s1, int simm13a ) { v9_only(); emit_int32( op(ldst_op) | rd(d) | op3(stx_op3 | alt_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
void stda( Register d, Register s1, Register s2, int ia ) { emit_long( op(ldst_op) | rd(d) | op3(std_op3 | alt_bit_op3) | rs1(s1) | imm_asi(ia) | rs2(s2) ); }
|
void stda( Register d, Register s1, Register s2, int ia ) { emit_int32( op(ldst_op) | rd(d) | op3(std_op3 | alt_bit_op3) | rs1(s1) | imm_asi(ia) | rs2(s2) ); }
|
||||||
void stda( Register d, Register s1, int simm13a ) { emit_long( op(ldst_op) | rd(d) | op3(std_op3 | alt_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void stda( Register d, Register s1, int simm13a ) { emit_int32( op(ldst_op) | rd(d) | op3(std_op3 | alt_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
|
|
||||||
// pp 97 (v8)
|
// pp 97 (v8)
|
||||||
|
|
||||||
|
@ -1129,15 +1129,15 @@ public:
|
||||||
|
|
||||||
// pp 230
|
// pp 230
|
||||||
|
|
||||||
void sub( Register s1, Register s2, Register d ) { emit_long( op(arith_op) | rd(d) | op3(sub_op3 ) | rs1(s1) | rs2(s2) ); }
|
void sub( Register s1, Register s2, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(sub_op3 ) | rs1(s1) | rs2(s2) ); }
|
||||||
void sub( Register s1, int simm13a, Register d ) { emit_long( op(arith_op) | rd(d) | op3(sub_op3 ) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void sub( Register s1, int simm13a, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(sub_op3 ) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
|
|
||||||
void subcc( Register s1, Register s2, Register d ) { emit_long( op(arith_op) | rd(d) | op3(sub_op3 | cc_bit_op3 ) | rs1(s1) | rs2(s2) ); }
|
void subcc( Register s1, Register s2, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(sub_op3 | cc_bit_op3 ) | rs1(s1) | rs2(s2) ); }
|
||||||
void subcc( Register s1, int simm13a, Register d ) { emit_long( op(arith_op) | rd(d) | op3(sub_op3 | cc_bit_op3 ) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void subcc( Register s1, int simm13a, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(sub_op3 | cc_bit_op3 ) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
void subc( Register s1, Register s2, Register d ) { emit_long( op(arith_op) | rd(d) | op3(subc_op3 ) | rs1(s1) | rs2(s2) ); }
|
void subc( Register s1, Register s2, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(subc_op3 ) | rs1(s1) | rs2(s2) ); }
|
||||||
void subc( Register s1, int simm13a, Register d ) { emit_long( op(arith_op) | rd(d) | op3(subc_op3 ) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void subc( Register s1, int simm13a, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(subc_op3 ) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
void subccc( Register s1, Register s2, Register d ) { emit_long( op(arith_op) | rd(d) | op3(subc_op3 | cc_bit_op3) | rs1(s1) | rs2(s2) ); }
|
void subccc( Register s1, Register s2, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(subc_op3 | cc_bit_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
void subccc( Register s1, int simm13a, Register d ) { emit_long( op(arith_op) | rd(d) | op3(subc_op3 | cc_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void subccc( Register s1, int simm13a, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(subc_op3 | cc_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
|
|
||||||
// pp 231
|
// pp 231
|
||||||
|
|
||||||
|
@ -1146,55 +1146,55 @@ public:
|
||||||
|
|
||||||
// pp 232
|
// pp 232
|
||||||
|
|
||||||
void swapa( Register s1, Register s2, int ia, Register d ) { v9_dep(); emit_long( op(ldst_op) | rd(d) | op3(swap_op3 | alt_bit_op3) | rs1(s1) | imm_asi(ia) | rs2(s2) ); }
|
void swapa( Register s1, Register s2, int ia, Register d ) { v9_dep(); emit_int32( op(ldst_op) | rd(d) | op3(swap_op3 | alt_bit_op3) | rs1(s1) | imm_asi(ia) | rs2(s2) ); }
|
||||||
void swapa( Register s1, int simm13a, Register d ) { v9_dep(); emit_long( op(ldst_op) | rd(d) | op3(swap_op3 | alt_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void swapa( Register s1, int simm13a, Register d ) { v9_dep(); emit_int32( op(ldst_op) | rd(d) | op3(swap_op3 | alt_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
|
|
||||||
// pp 234, note op in book is wrong, see pp 268
|
// pp 234, note op in book is wrong, see pp 268
|
||||||
|
|
||||||
void taddcc( Register s1, Register s2, Register d ) { emit_long( op(arith_op) | rd(d) | op3(taddcc_op3 ) | rs1(s1) | rs2(s2) ); }
|
void taddcc( Register s1, Register s2, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(taddcc_op3 ) | rs1(s1) | rs2(s2) ); }
|
||||||
void taddcc( Register s1, int simm13a, Register d ) { emit_long( op(arith_op) | rd(d) | op3(taddcc_op3 ) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void taddcc( Register s1, int simm13a, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(taddcc_op3 ) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
void taddcctv( Register s1, Register s2, Register d ) { v9_dep(); emit_long( op(arith_op) | rd(d) | op3(taddcctv_op3) | rs1(s1) | rs2(s2) ); }
|
void taddcctv( Register s1, Register s2, Register d ) { v9_dep(); emit_int32( op(arith_op) | rd(d) | op3(taddcctv_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
void taddcctv( Register s1, int simm13a, Register d ) { v9_dep(); emit_long( op(arith_op) | rd(d) | op3(taddcctv_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void taddcctv( Register s1, int simm13a, Register d ) { v9_dep(); emit_int32( op(arith_op) | rd(d) | op3(taddcctv_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
|
|
||||||
// pp 235
|
// pp 235
|
||||||
|
|
||||||
void tsubcc( Register s1, Register s2, Register d ) { emit_long( op(arith_op) | rd(d) | op3(tsubcc_op3 ) | rs1(s1) | rs2(s2) ); }
|
void tsubcc( Register s1, Register s2, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(tsubcc_op3 ) | rs1(s1) | rs2(s2) ); }
|
||||||
void tsubcc( Register s1, int simm13a, Register d ) { emit_long( op(arith_op) | rd(d) | op3(tsubcc_op3 ) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void tsubcc( Register s1, int simm13a, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(tsubcc_op3 ) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
void tsubcctv( Register s1, Register s2, Register d ) { emit_long( op(arith_op) | rd(d) | op3(tsubcctv_op3) | rs1(s1) | rs2(s2) ); }
|
void tsubcctv( Register s1, Register s2, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(tsubcctv_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
void tsubcctv( Register s1, int simm13a, Register d ) { emit_long( op(arith_op) | rd(d) | op3(tsubcctv_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
void tsubcctv( Register s1, int simm13a, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(tsubcctv_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
|
|
||||||
// pp 237
|
// pp 237
|
||||||
|
|
||||||
void trap( Condition c, CC cc, Register s1, Register s2 ) { v8_no_cc(cc); emit_long( op(arith_op) | cond(c) | op3(trap_op3) | rs1(s1) | trapcc(cc) | rs2(s2)); }
|
void trap( Condition c, CC cc, Register s1, Register s2 ) { v8_no_cc(cc); emit_int32( op(arith_op) | cond(c) | op3(trap_op3) | rs1(s1) | trapcc(cc) | rs2(s2)); }
|
||||||
void trap( Condition c, CC cc, Register s1, int trapa ) { v8_no_cc(cc); emit_long( op(arith_op) | cond(c) | op3(trap_op3) | rs1(s1) | trapcc(cc) | immed(true) | u_field(trapa, 6, 0)); }
|
void trap( Condition c, CC cc, Register s1, int trapa ) { v8_no_cc(cc); emit_int32( op(arith_op) | cond(c) | op3(trap_op3) | rs1(s1) | trapcc(cc) | immed(true) | u_field(trapa, 6, 0)); }
|
||||||
// simple uncond. trap
|
// simple uncond. trap
|
||||||
void trap( int trapa ) { trap( always, icc, G0, trapa ); }
|
void trap( int trapa ) { trap( always, icc, G0, trapa ); }
|
||||||
|
|
||||||
// pp 239 omit write priv register for now
|
// pp 239 omit write priv register for now
|
||||||
|
|
||||||
inline void wry( Register d) { v9_dep(); emit_long( op(arith_op) | rs1(d) | op3(wrreg_op3) | u_field(0, 29, 25)); }
|
inline void wry( Register d) { v9_dep(); emit_int32( op(arith_op) | rs1(d) | op3(wrreg_op3) | u_field(0, 29, 25)); }
|
||||||
inline void wrccr(Register s) { v9_only(); emit_long( op(arith_op) | rs1(s) | op3(wrreg_op3) | u_field(2, 29, 25)); }
|
inline void wrccr(Register s) { v9_only(); emit_int32( op(arith_op) | rs1(s) | op3(wrreg_op3) | u_field(2, 29, 25)); }
|
||||||
inline void wrccr(Register s, int simm13a) { v9_only(); emit_long( op(arith_op) |
|
inline void wrccr(Register s, int simm13a) { v9_only(); emit_int32( op(arith_op) |
|
||||||
rs1(s) |
|
rs1(s) |
|
||||||
op3(wrreg_op3) |
|
op3(wrreg_op3) |
|
||||||
u_field(2, 29, 25) |
|
u_field(2, 29, 25) |
|
||||||
immed(true) |
|
immed(true) |
|
||||||
simm(simm13a, 13)); }
|
simm(simm13a, 13)); }
|
||||||
inline void wrasi(Register d) { v9_only(); emit_long( op(arith_op) | rs1(d) | op3(wrreg_op3) | u_field(3, 29, 25)); }
|
inline void wrasi(Register d) { v9_only(); emit_int32( op(arith_op) | rs1(d) | op3(wrreg_op3) | u_field(3, 29, 25)); }
|
||||||
// wrasi(d, imm) stores (d xor imm) to asi
|
// wrasi(d, imm) stores (d xor imm) to asi
|
||||||
inline void wrasi(Register d, int simm13a) { v9_only(); emit_long( op(arith_op) | rs1(d) | op3(wrreg_op3) |
|
inline void wrasi(Register d, int simm13a) { v9_only(); emit_int32( op(arith_op) | rs1(d) | op3(wrreg_op3) |
|
||||||
u_field(3, 29, 25) | immed(true) | simm(simm13a, 13)); }
|
u_field(3, 29, 25) | immed(true) | simm(simm13a, 13)); }
|
||||||
inline void wrfprs( Register d) { v9_only(); emit_long( op(arith_op) | rs1(d) | op3(wrreg_op3) | u_field(6, 29, 25)); }
|
inline void wrfprs( Register d) { v9_only(); emit_int32( op(arith_op) | rs1(d) | op3(wrreg_op3) | u_field(6, 29, 25)); }
|
||||||
|
|
||||||
|
|
||||||
// VIS3 instructions
|
// VIS3 instructions
|
||||||
|
|
||||||
void movstosw( FloatRegister s, Register d ) { vis3_only(); emit_long( op(arith_op) | rd(d) | op3(mftoi_op3) | opf(mstosw_opf) | fs2(s, FloatRegisterImpl::S)); }
|
void movstosw( FloatRegister s, Register d ) { vis3_only(); emit_int32( op(arith_op) | rd(d) | op3(mftoi_op3) | opf(mstosw_opf) | fs2(s, FloatRegisterImpl::S)); }
|
||||||
void movstouw( FloatRegister s, Register d ) { vis3_only(); emit_long( op(arith_op) | rd(d) | op3(mftoi_op3) | opf(mstouw_opf) | fs2(s, FloatRegisterImpl::S)); }
|
void movstouw( FloatRegister s, Register d ) { vis3_only(); emit_int32( op(arith_op) | rd(d) | op3(mftoi_op3) | opf(mstouw_opf) | fs2(s, FloatRegisterImpl::S)); }
|
||||||
void movdtox( FloatRegister s, Register d ) { vis3_only(); emit_long( op(arith_op) | rd(d) | op3(mftoi_op3) | opf(mdtox_opf) | fs2(s, FloatRegisterImpl::D)); }
|
void movdtox( FloatRegister s, Register d ) { vis3_only(); emit_int32( op(arith_op) | rd(d) | op3(mftoi_op3) | opf(mdtox_opf) | fs2(s, FloatRegisterImpl::D)); }
|
||||||
|
|
||||||
void movwtos( Register s, FloatRegister d ) { vis3_only(); emit_long( op(arith_op) | fd(d, FloatRegisterImpl::S) | op3(mftoi_op3) | opf(mwtos_opf) | rs2(s)); }
|
void movwtos( Register s, FloatRegister d ) { vis3_only(); emit_int32( op(arith_op) | fd(d, FloatRegisterImpl::S) | op3(mftoi_op3) | opf(mwtos_opf) | rs2(s)); }
|
||||||
void movxtod( Register s, FloatRegister d ) { vis3_only(); emit_long( op(arith_op) | fd(d, FloatRegisterImpl::D) | op3(mftoi_op3) | opf(mxtod_opf) | rs2(s)); }
|
void movxtod( Register s, FloatRegister d ) { vis3_only(); emit_int32( op(arith_op) | fd(d, FloatRegisterImpl::D) | op3(mftoi_op3) | opf(mxtod_opf) | rs2(s)); }
|
||||||
|
|
||||||
// Creation
|
// Creation
|
||||||
Assembler(CodeBuffer* code) : AbstractAssembler(code) {
|
Assembler(CodeBuffer* code) : AbstractAssembler(code) {
|
||||||
|
|
|
@ -35,24 +35,24 @@ inline void Assembler::check_delay() {
|
||||||
# endif
|
# endif
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void Assembler::emit_long(int x) {
|
inline void Assembler::emit_int32(int x) {
|
||||||
check_delay();
|
check_delay();
|
||||||
AbstractAssembler::emit_long(x);
|
AbstractAssembler::emit_int32(x);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void Assembler::emit_data(int x, relocInfo::relocType rtype) {
|
inline void Assembler::emit_data(int x, relocInfo::relocType rtype) {
|
||||||
relocate(rtype);
|
relocate(rtype);
|
||||||
emit_long(x);
|
emit_int32(x);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void Assembler::emit_data(int x, RelocationHolder const& rspec) {
|
inline void Assembler::emit_data(int x, RelocationHolder const& rspec) {
|
||||||
relocate(rspec);
|
relocate(rspec);
|
||||||
emit_long(x);
|
emit_int32(x);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline void Assembler::add(Register s1, Register s2, Register d ) { emit_long( op(arith_op) | rd(d) | op3(add_op3) | rs1(s1) | rs2(s2) ); }
|
inline void Assembler::add(Register s1, Register s2, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(add_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
inline void Assembler::add(Register s1, int simm13a, Register d ) { emit_long( op(arith_op) | rd(d) | op3(add_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
inline void Assembler::add(Register s1, int simm13a, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(add_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
|
||||||
|
|
||||||
inline void Assembler::bpr( RCondition c, bool a, Predict p, Register s1, address d, relocInfo::relocType rt ) { v9_only(); cti(); emit_data( op(branch_op) | annul(a) | cond(c) | op2(bpr_op2) | wdisp16(intptr_t(d), intptr_t(pc())) | predict(p) | rs1(s1), rt); has_delay_slot(); }
|
inline void Assembler::bpr( RCondition c, bool a, Predict p, Register s1, address d, relocInfo::relocType rt ) { v9_only(); cti(); emit_data( op(branch_op) | annul(a) | cond(c) | op2(bpr_op2) | wdisp16(intptr_t(d), intptr_t(pc())) | predict(p) | rs1(s1), rt); has_delay_slot(); }
|
||||||
inline void Assembler::bpr( RCondition c, bool a, Predict p, Register s1, Label& L) { bpr( c, a, p, s1, target(L)); }
|
inline void Assembler::bpr( RCondition c, bool a, Predict p, Register s1, Label& L) { bpr( c, a, p, s1, target(L)); }
|
||||||
|
@ -79,93 +79,93 @@ inline void Assembler::cbcond(Condition c, CC cc, Register s1, int simm5, Label&
|
||||||
inline void Assembler::call( address d, relocInfo::relocType rt ) { cti(); emit_data( op(call_op) | wdisp(intptr_t(d), intptr_t(pc()), 30), rt); has_delay_slot(); assert(rt != relocInfo::virtual_call_type, "must use virtual_call_Relocation::spec"); }
|
inline void Assembler::call( address d, relocInfo::relocType rt ) { cti(); emit_data( op(call_op) | wdisp(intptr_t(d), intptr_t(pc()), 30), rt); has_delay_slot(); assert(rt != relocInfo::virtual_call_type, "must use virtual_call_Relocation::spec"); }
|
||||||
inline void Assembler::call( Label& L, relocInfo::relocType rt ) { call( target(L), rt); }
|
inline void Assembler::call( Label& L, relocInfo::relocType rt ) { call( target(L), rt); }
|
||||||
|
|
||||||
inline void Assembler::flush( Register s1, Register s2) { emit_long( op(arith_op) | op3(flush_op3) | rs1(s1) | rs2(s2)); }
|
inline void Assembler::flush( Register s1, Register s2) { emit_int32( op(arith_op) | op3(flush_op3) | rs1(s1) | rs2(s2)); }
|
||||||
inline void Assembler::flush( Register s1, int simm13a) { emit_data( op(arith_op) | op3(flush_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
inline void Assembler::flush( Register s1, int simm13a) { emit_data( op(arith_op) | op3(flush_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
||||||
|
|
||||||
inline void Assembler::jmpl( Register s1, Register s2, Register d ) { cti(); emit_long( op(arith_op) | rd(d) | op3(jmpl_op3) | rs1(s1) | rs2(s2)); has_delay_slot(); }
|
inline void Assembler::jmpl( Register s1, Register s2, Register d ) { cti(); emit_int32( op(arith_op) | rd(d) | op3(jmpl_op3) | rs1(s1) | rs2(s2)); has_delay_slot(); }
|
||||||
inline void Assembler::jmpl( Register s1, int simm13a, Register d, RelocationHolder const& rspec ) { cti(); emit_data( op(arith_op) | rd(d) | op3(jmpl_op3) | rs1(s1) | immed(true) | simm(simm13a, 13), rspec); has_delay_slot(); }
|
inline void Assembler::jmpl( Register s1, int simm13a, Register d, RelocationHolder const& rspec ) { cti(); emit_data( op(arith_op) | rd(d) | op3(jmpl_op3) | rs1(s1) | immed(true) | simm(simm13a, 13), rspec); has_delay_slot(); }
|
||||||
|
|
||||||
inline void Assembler::ldf(FloatRegisterImpl::Width w, Register s1, Register s2, FloatRegister d) { emit_long( op(ldst_op) | fd(d, w) | alt_op3(ldf_op3, w) | rs1(s1) | rs2(s2) ); }
|
inline void Assembler::ldf(FloatRegisterImpl::Width w, Register s1, Register s2, FloatRegister d) { emit_int32( op(ldst_op) | fd(d, w) | alt_op3(ldf_op3, w) | rs1(s1) | rs2(s2) ); }
|
||||||
inline void Assembler::ldf(FloatRegisterImpl::Width w, Register s1, int simm13a, FloatRegister d, RelocationHolder const& rspec) { emit_data( op(ldst_op) | fd(d, w) | alt_op3(ldf_op3, w) | rs1(s1) | immed(true) | simm(simm13a, 13), rspec); }
|
inline void Assembler::ldf(FloatRegisterImpl::Width w, Register s1, int simm13a, FloatRegister d, RelocationHolder const& rspec) { emit_data( op(ldst_op) | fd(d, w) | alt_op3(ldf_op3, w) | rs1(s1) | immed(true) | simm(simm13a, 13), rspec); }
|
||||||
|
|
||||||
inline void Assembler::ldfsr( Register s1, Register s2) { v9_dep(); emit_long( op(ldst_op) | op3(ldfsr_op3) | rs1(s1) | rs2(s2) ); }
|
inline void Assembler::ldfsr( Register s1, Register s2) { v9_dep(); emit_int32( op(ldst_op) | op3(ldfsr_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
inline void Assembler::ldfsr( Register s1, int simm13a) { v9_dep(); emit_data( op(ldst_op) | op3(ldfsr_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
inline void Assembler::ldfsr( Register s1, int simm13a) { v9_dep(); emit_data( op(ldst_op) | op3(ldfsr_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
||||||
inline void Assembler::ldxfsr( Register s1, Register s2) { v9_only(); emit_long( op(ldst_op) | rd(G1) | op3(ldfsr_op3) | rs1(s1) | rs2(s2) ); }
|
inline void Assembler::ldxfsr( Register s1, Register s2) { v9_only(); emit_int32( op(ldst_op) | rd(G1) | op3(ldfsr_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
inline void Assembler::ldxfsr( Register s1, int simm13a) { v9_only(); emit_data( op(ldst_op) | rd(G1) | op3(ldfsr_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
inline void Assembler::ldxfsr( Register s1, int simm13a) { v9_only(); emit_data( op(ldst_op) | rd(G1) | op3(ldfsr_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
||||||
|
|
||||||
inline void Assembler::ldc( Register s1, Register s2, int crd) { v8_only(); emit_long( op(ldst_op) | fcn(crd) | op3(ldc_op3 ) | rs1(s1) | rs2(s2) ); }
|
inline void Assembler::ldc( Register s1, Register s2, int crd) { v8_only(); emit_int32( op(ldst_op) | fcn(crd) | op3(ldc_op3 ) | rs1(s1) | rs2(s2) ); }
|
||||||
inline void Assembler::ldc( Register s1, int simm13a, int crd) { v8_only(); emit_data( op(ldst_op) | fcn(crd) | op3(ldc_op3 ) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
inline void Assembler::ldc( Register s1, int simm13a, int crd) { v8_only(); emit_data( op(ldst_op) | fcn(crd) | op3(ldc_op3 ) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
||||||
inline void Assembler::lddc( Register s1, Register s2, int crd) { v8_only(); emit_long( op(ldst_op) | fcn(crd) | op3(lddc_op3 ) | rs1(s1) | rs2(s2) ); }
|
inline void Assembler::lddc( Register s1, Register s2, int crd) { v8_only(); emit_int32( op(ldst_op) | fcn(crd) | op3(lddc_op3 ) | rs1(s1) | rs2(s2) ); }
|
||||||
inline void Assembler::lddc( Register s1, int simm13a, int crd) { v8_only(); emit_data( op(ldst_op) | fcn(crd) | op3(lddc_op3 ) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
inline void Assembler::lddc( Register s1, int simm13a, int crd) { v8_only(); emit_data( op(ldst_op) | fcn(crd) | op3(lddc_op3 ) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
||||||
inline void Assembler::ldcsr( Register s1, Register s2, int crd) { v8_only(); emit_long( op(ldst_op) | fcn(crd) | op3(ldcsr_op3) | rs1(s1) | rs2(s2) ); }
|
inline void Assembler::ldcsr( Register s1, Register s2, int crd) { v8_only(); emit_int32( op(ldst_op) | fcn(crd) | op3(ldcsr_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
inline void Assembler::ldcsr( Register s1, int simm13a, int crd) { v8_only(); emit_data( op(ldst_op) | fcn(crd) | op3(ldcsr_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
inline void Assembler::ldcsr( Register s1, int simm13a, int crd) { v8_only(); emit_data( op(ldst_op) | fcn(crd) | op3(ldcsr_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
||||||
|
|
||||||
inline void Assembler::ldsb( Register s1, Register s2, Register d) { emit_long( op(ldst_op) | rd(d) | op3(ldsb_op3) | rs1(s1) | rs2(s2) ); }
|
inline void Assembler::ldsb( Register s1, Register s2, Register d) { emit_int32( op(ldst_op) | rd(d) | op3(ldsb_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
inline void Assembler::ldsb( Register s1, int simm13a, Register d) { emit_data( op(ldst_op) | rd(d) | op3(ldsb_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
inline void Assembler::ldsb( Register s1, int simm13a, Register d) { emit_data( op(ldst_op) | rd(d) | op3(ldsb_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
||||||
|
|
||||||
inline void Assembler::ldsh( Register s1, Register s2, Register d) { emit_long( op(ldst_op) | rd(d) | op3(ldsh_op3) | rs1(s1) | rs2(s2) ); }
|
inline void Assembler::ldsh( Register s1, Register s2, Register d) { emit_int32( op(ldst_op) | rd(d) | op3(ldsh_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
inline void Assembler::ldsh( Register s1, int simm13a, Register d) { emit_data( op(ldst_op) | rd(d) | op3(ldsh_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
inline void Assembler::ldsh( Register s1, int simm13a, Register d) { emit_data( op(ldst_op) | rd(d) | op3(ldsh_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
||||||
inline void Assembler::ldsw( Register s1, Register s2, Register d) { emit_long( op(ldst_op) | rd(d) | op3(ldsw_op3) | rs1(s1) | rs2(s2) ); }
|
inline void Assembler::ldsw( Register s1, Register s2, Register d) { emit_int32( op(ldst_op) | rd(d) | op3(ldsw_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
inline void Assembler::ldsw( Register s1, int simm13a, Register d) { emit_data( op(ldst_op) | rd(d) | op3(ldsw_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
inline void Assembler::ldsw( Register s1, int simm13a, Register d) { emit_data( op(ldst_op) | rd(d) | op3(ldsw_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
||||||
inline void Assembler::ldub( Register s1, Register s2, Register d) { emit_long( op(ldst_op) | rd(d) | op3(ldub_op3) | rs1(s1) | rs2(s2) ); }
|
inline void Assembler::ldub( Register s1, Register s2, Register d) { emit_int32( op(ldst_op) | rd(d) | op3(ldub_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
inline void Assembler::ldub( Register s1, int simm13a, Register d) { emit_data( op(ldst_op) | rd(d) | op3(ldub_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
inline void Assembler::ldub( Register s1, int simm13a, Register d) { emit_data( op(ldst_op) | rd(d) | op3(ldub_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
||||||
inline void Assembler::lduh( Register s1, Register s2, Register d) { emit_long( op(ldst_op) | rd(d) | op3(lduh_op3) | rs1(s1) | rs2(s2) ); }
|
inline void Assembler::lduh( Register s1, Register s2, Register d) { emit_int32( op(ldst_op) | rd(d) | op3(lduh_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
inline void Assembler::lduh( Register s1, int simm13a, Register d) { emit_data( op(ldst_op) | rd(d) | op3(lduh_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
inline void Assembler::lduh( Register s1, int simm13a, Register d) { emit_data( op(ldst_op) | rd(d) | op3(lduh_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
||||||
inline void Assembler::lduw( Register s1, Register s2, Register d) { emit_long( op(ldst_op) | rd(d) | op3(lduw_op3) | rs1(s1) | rs2(s2) ); }
|
inline void Assembler::lduw( Register s1, Register s2, Register d) { emit_int32( op(ldst_op) | rd(d) | op3(lduw_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
inline void Assembler::lduw( Register s1, int simm13a, Register d) { emit_data( op(ldst_op) | rd(d) | op3(lduw_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
inline void Assembler::lduw( Register s1, int simm13a, Register d) { emit_data( op(ldst_op) | rd(d) | op3(lduw_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
||||||
|
|
||||||
inline void Assembler::ldx( Register s1, Register s2, Register d) { v9_only(); emit_long( op(ldst_op) | rd(d) | op3(ldx_op3) | rs1(s1) | rs2(s2) ); }
|
inline void Assembler::ldx( Register s1, Register s2, Register d) { v9_only(); emit_int32( op(ldst_op) | rd(d) | op3(ldx_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
inline void Assembler::ldx( Register s1, int simm13a, Register d) { v9_only(); emit_data( op(ldst_op) | rd(d) | op3(ldx_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
inline void Assembler::ldx( Register s1, int simm13a, Register d) { v9_only(); emit_data( op(ldst_op) | rd(d) | op3(ldx_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
||||||
inline void Assembler::ldd( Register s1, Register s2, Register d) { v9_dep(); assert(d->is_even(), "not even"); emit_long( op(ldst_op) | rd(d) | op3(ldd_op3) | rs1(s1) | rs2(s2) ); }
|
inline void Assembler::ldd( Register s1, Register s2, Register d) { v9_dep(); assert(d->is_even(), "not even"); emit_int32( op(ldst_op) | rd(d) | op3(ldd_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
inline void Assembler::ldd( Register s1, int simm13a, Register d) { v9_dep(); assert(d->is_even(), "not even"); emit_data( op(ldst_op) | rd(d) | op3(ldd_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
inline void Assembler::ldd( Register s1, int simm13a, Register d) { v9_dep(); assert(d->is_even(), "not even"); emit_data( op(ldst_op) | rd(d) | op3(ldd_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
||||||
|
|
||||||
inline void Assembler::ldstub( Register s1, Register s2, Register d) { emit_long( op(ldst_op) | rd(d) | op3(ldstub_op3) | rs1(s1) | rs2(s2) ); }
|
inline void Assembler::ldstub( Register s1, Register s2, Register d) { emit_int32( op(ldst_op) | rd(d) | op3(ldstub_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
inline void Assembler::ldstub( Register s1, int simm13a, Register d) { emit_data( op(ldst_op) | rd(d) | op3(ldstub_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
inline void Assembler::ldstub( Register s1, int simm13a, Register d) { emit_data( op(ldst_op) | rd(d) | op3(ldstub_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
||||||
|
|
||||||
inline void Assembler::rett( Register s1, Register s2 ) { cti(); emit_long( op(arith_op) | op3(rett_op3) | rs1(s1) | rs2(s2)); has_delay_slot(); }
|
inline void Assembler::rett( Register s1, Register s2 ) { cti(); emit_int32( op(arith_op) | op3(rett_op3) | rs1(s1) | rs2(s2)); has_delay_slot(); }
|
||||||
inline void Assembler::rett( Register s1, int simm13a, relocInfo::relocType rt) { cti(); emit_data( op(arith_op) | op3(rett_op3) | rs1(s1) | immed(true) | simm(simm13a, 13), rt); has_delay_slot(); }
|
inline void Assembler::rett( Register s1, int simm13a, relocInfo::relocType rt) { cti(); emit_data( op(arith_op) | op3(rett_op3) | rs1(s1) | immed(true) | simm(simm13a, 13), rt); has_delay_slot(); }
|
||||||
|
|
||||||
inline void Assembler::sethi( int imm22a, Register d, RelocationHolder const& rspec ) { emit_data( op(branch_op) | rd(d) | op2(sethi_op2) | hi22(imm22a), rspec); }
|
inline void Assembler::sethi( int imm22a, Register d, RelocationHolder const& rspec ) { emit_data( op(branch_op) | rd(d) | op2(sethi_op2) | hi22(imm22a), rspec); }
|
||||||
|
|
||||||
// pp 222
|
// pp 222
|
||||||
|
|
||||||
inline void Assembler::stf( FloatRegisterImpl::Width w, FloatRegister d, Register s1, Register s2) { emit_long( op(ldst_op) | fd(d, w) | alt_op3(stf_op3, w) | rs1(s1) | rs2(s2) ); }
|
inline void Assembler::stf( FloatRegisterImpl::Width w, FloatRegister d, Register s1, Register s2) { emit_int32( op(ldst_op) | fd(d, w) | alt_op3(stf_op3, w) | rs1(s1) | rs2(s2) ); }
|
||||||
inline void Assembler::stf( FloatRegisterImpl::Width w, FloatRegister d, Register s1, int simm13a) { emit_data( op(ldst_op) | fd(d, w) | alt_op3(stf_op3, w) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
inline void Assembler::stf( FloatRegisterImpl::Width w, FloatRegister d, Register s1, int simm13a) { emit_data( op(ldst_op) | fd(d, w) | alt_op3(stf_op3, w) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
||||||
|
|
||||||
inline void Assembler::stfsr( Register s1, Register s2) { v9_dep(); emit_long( op(ldst_op) | op3(stfsr_op3) | rs1(s1) | rs2(s2) ); }
|
inline void Assembler::stfsr( Register s1, Register s2) { v9_dep(); emit_int32( op(ldst_op) | op3(stfsr_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
inline void Assembler::stfsr( Register s1, int simm13a) { v9_dep(); emit_data( op(ldst_op) | op3(stfsr_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
inline void Assembler::stfsr( Register s1, int simm13a) { v9_dep(); emit_data( op(ldst_op) | op3(stfsr_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
||||||
inline void Assembler::stxfsr( Register s1, Register s2) { v9_only(); emit_long( op(ldst_op) | rd(G1) | op3(stfsr_op3) | rs1(s1) | rs2(s2) ); }
|
inline void Assembler::stxfsr( Register s1, Register s2) { v9_only(); emit_int32( op(ldst_op) | rd(G1) | op3(stfsr_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
inline void Assembler::stxfsr( Register s1, int simm13a) { v9_only(); emit_data( op(ldst_op) | rd(G1) | op3(stfsr_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
inline void Assembler::stxfsr( Register s1, int simm13a) { v9_only(); emit_data( op(ldst_op) | rd(G1) | op3(stfsr_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
||||||
|
|
||||||
// p 226
|
// p 226
|
||||||
|
|
||||||
inline void Assembler::stb( Register d, Register s1, Register s2) { emit_long( op(ldst_op) | rd(d) | op3(stb_op3) | rs1(s1) | rs2(s2) ); }
|
inline void Assembler::stb( Register d, Register s1, Register s2) { emit_int32( op(ldst_op) | rd(d) | op3(stb_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
inline void Assembler::stb( Register d, Register s1, int simm13a) { emit_data( op(ldst_op) | rd(d) | op3(stb_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
inline void Assembler::stb( Register d, Register s1, int simm13a) { emit_data( op(ldst_op) | rd(d) | op3(stb_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
||||||
inline void Assembler::sth( Register d, Register s1, Register s2) { emit_long( op(ldst_op) | rd(d) | op3(sth_op3) | rs1(s1) | rs2(s2) ); }
|
inline void Assembler::sth( Register d, Register s1, Register s2) { emit_int32( op(ldst_op) | rd(d) | op3(sth_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
inline void Assembler::sth( Register d, Register s1, int simm13a) { emit_data( op(ldst_op) | rd(d) | op3(sth_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
inline void Assembler::sth( Register d, Register s1, int simm13a) { emit_data( op(ldst_op) | rd(d) | op3(sth_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
||||||
inline void Assembler::stw( Register d, Register s1, Register s2) { emit_long( op(ldst_op) | rd(d) | op3(stw_op3) | rs1(s1) | rs2(s2) ); }
|
inline void Assembler::stw( Register d, Register s1, Register s2) { emit_int32( op(ldst_op) | rd(d) | op3(stw_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
inline void Assembler::stw( Register d, Register s1, int simm13a) { emit_data( op(ldst_op) | rd(d) | op3(stw_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
inline void Assembler::stw( Register d, Register s1, int simm13a) { emit_data( op(ldst_op) | rd(d) | op3(stw_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
||||||
|
|
||||||
|
|
||||||
inline void Assembler::stx( Register d, Register s1, Register s2) { v9_only(); emit_long( op(ldst_op) | rd(d) | op3(stx_op3) | rs1(s1) | rs2(s2) ); }
|
inline void Assembler::stx( Register d, Register s1, Register s2) { v9_only(); emit_int32( op(ldst_op) | rd(d) | op3(stx_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
inline void Assembler::stx( Register d, Register s1, int simm13a) { v9_only(); emit_data( op(ldst_op) | rd(d) | op3(stx_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
inline void Assembler::stx( Register d, Register s1, int simm13a) { v9_only(); emit_data( op(ldst_op) | rd(d) | op3(stx_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
||||||
inline void Assembler::std( Register d, Register s1, Register s2) { v9_dep(); assert(d->is_even(), "not even"); emit_long( op(ldst_op) | rd(d) | op3(std_op3) | rs1(s1) | rs2(s2) ); }
|
inline void Assembler::std( Register d, Register s1, Register s2) { v9_dep(); assert(d->is_even(), "not even"); emit_int32( op(ldst_op) | rd(d) | op3(std_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
inline void Assembler::std( Register d, Register s1, int simm13a) { v9_dep(); assert(d->is_even(), "not even"); emit_data( op(ldst_op) | rd(d) | op3(std_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
inline void Assembler::std( Register d, Register s1, int simm13a) { v9_dep(); assert(d->is_even(), "not even"); emit_data( op(ldst_op) | rd(d) | op3(std_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
||||||
|
|
||||||
// v8 p 99
|
// v8 p 99
|
||||||
|
|
||||||
inline void Assembler::stc( int crd, Register s1, Register s2) { v8_only(); emit_long( op(ldst_op) | fcn(crd) | op3(stc_op3 ) | rs1(s1) | rs2(s2) ); }
|
inline void Assembler::stc( int crd, Register s1, Register s2) { v8_only(); emit_int32( op(ldst_op) | fcn(crd) | op3(stc_op3 ) | rs1(s1) | rs2(s2) ); }
|
||||||
inline void Assembler::stc( int crd, Register s1, int simm13a) { v8_only(); emit_data( op(ldst_op) | fcn(crd) | op3(stc_op3 ) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
inline void Assembler::stc( int crd, Register s1, int simm13a) { v8_only(); emit_data( op(ldst_op) | fcn(crd) | op3(stc_op3 ) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
||||||
inline void Assembler::stdc( int crd, Register s1, Register s2) { v8_only(); emit_long( op(ldst_op) | fcn(crd) | op3(stdc_op3) | rs1(s1) | rs2(s2) ); }
|
inline void Assembler::stdc( int crd, Register s1, Register s2) { v8_only(); emit_int32( op(ldst_op) | fcn(crd) | op3(stdc_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
inline void Assembler::stdc( int crd, Register s1, int simm13a) { v8_only(); emit_data( op(ldst_op) | fcn(crd) | op3(stdc_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
inline void Assembler::stdc( int crd, Register s1, int simm13a) { v8_only(); emit_data( op(ldst_op) | fcn(crd) | op3(stdc_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
||||||
inline void Assembler::stcsr( int crd, Register s1, Register s2) { v8_only(); emit_long( op(ldst_op) | fcn(crd) | op3(stcsr_op3) | rs1(s1) | rs2(s2) ); }
|
inline void Assembler::stcsr( int crd, Register s1, Register s2) { v8_only(); emit_int32( op(ldst_op) | fcn(crd) | op3(stcsr_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
inline void Assembler::stcsr( int crd, Register s1, int simm13a) { v8_only(); emit_data( op(ldst_op) | fcn(crd) | op3(stcsr_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
inline void Assembler::stcsr( int crd, Register s1, int simm13a) { v8_only(); emit_data( op(ldst_op) | fcn(crd) | op3(stcsr_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
||||||
inline void Assembler::stdcq( int crd, Register s1, Register s2) { v8_only(); emit_long( op(ldst_op) | fcn(crd) | op3(stdcq_op3) | rs1(s1) | rs2(s2) ); }
|
inline void Assembler::stdcq( int crd, Register s1, Register s2) { v8_only(); emit_int32( op(ldst_op) | fcn(crd) | op3(stdcq_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
inline void Assembler::stdcq( int crd, Register s1, int simm13a) { v8_only(); emit_data( op(ldst_op) | fcn(crd) | op3(stdcq_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
inline void Assembler::stdcq( int crd, Register s1, int simm13a) { v8_only(); emit_data( op(ldst_op) | fcn(crd) | op3(stdcq_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
||||||
|
|
||||||
// pp 231
|
// pp 231
|
||||||
|
|
||||||
inline void Assembler::swap( Register s1, Register s2, Register d) { v9_dep(); emit_long( op(ldst_op) | rd(d) | op3(swap_op3) | rs1(s1) | rs2(s2) ); }
|
inline void Assembler::swap( Register s1, Register s2, Register d) { v9_dep(); emit_int32( op(ldst_op) | rd(d) | op3(swap_op3) | rs1(s1) | rs2(s2) ); }
|
||||||
inline void Assembler::swap( Register s1, int simm13a, Register d) { v9_dep(); emit_data( op(ldst_op) | rd(d) | op3(swap_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
inline void Assembler::swap( Register s1, int simm13a, Register d) { v9_dep(); emit_data( op(ldst_op) | rd(d) | op3(swap_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
|
||||||
|
|
||||||
#endif // CPU_SPARC_VM_ASSEMBLER_SPARC_INLINE_HPP
|
#endif // CPU_SPARC_VM_ASSEMBLER_SPARC_INLINE_HPP
|
||||||
|
|
|
@ -137,7 +137,7 @@ address CppInterpreterGenerator::generate_result_handler_for(BasicType type) {
|
||||||
}
|
}
|
||||||
__ ret(); // return from interpreter activation
|
__ ret(); // return from interpreter activation
|
||||||
__ delayed()->restore(I5_savedSP, G0, SP); // remove interpreter frame
|
__ delayed()->restore(I5_savedSP, G0, SP); // remove interpreter frame
|
||||||
NOT_PRODUCT(__ emit_long(0);) // marker for disassembly
|
NOT_PRODUCT(__ emit_int32(0);) // marker for disassembly
|
||||||
return entry;
|
return entry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -232,7 +232,7 @@ address CppInterpreterGenerator::generate_tosca_to_stack_converter(BasicType typ
|
||||||
}
|
}
|
||||||
__ retl(); // return from interpreter activation
|
__ retl(); // return from interpreter activation
|
||||||
__ delayed()->nop(); // schedule this better
|
__ delayed()->nop(); // schedule this better
|
||||||
NOT_PRODUCT(__ emit_long(0);) // marker for disassembly
|
NOT_PRODUCT(__ emit_int32(0);) // marker for disassembly
|
||||||
return entry;
|
return entry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1473,7 +1473,7 @@ static address interpreter_frame_manager = NULL;
|
||||||
__ brx(Assembler::equal, false, Assembler::pt, skip); \
|
__ brx(Assembler::equal, false, Assembler::pt, skip); \
|
||||||
__ delayed()->nop(); \
|
__ delayed()->nop(); \
|
||||||
__ breakpoint_trap(); \
|
__ breakpoint_trap(); \
|
||||||
__ emit_long(marker); \
|
__ emit_int32(marker); \
|
||||||
__ bind(skip); \
|
__ bind(skip); \
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -1224,7 +1224,7 @@ void MacroAssembler::set_narrow_oop(jobject obj, Register d) {
|
||||||
// Relocation with special format (see relocInfo_sparc.hpp).
|
// Relocation with special format (see relocInfo_sparc.hpp).
|
||||||
relocate(rspec, 1);
|
relocate(rspec, 1);
|
||||||
// Assembler::sethi(0x3fffff, d);
|
// Assembler::sethi(0x3fffff, d);
|
||||||
emit_long( op(branch_op) | rd(d) | op2(sethi_op2) | hi22(0x3fffff) );
|
emit_int32( op(branch_op) | rd(d) | op2(sethi_op2) | hi22(0x3fffff) );
|
||||||
// Don't add relocation for 'add'. Do patching during 'sethi' processing.
|
// Don't add relocation for 'add'. Do patching during 'sethi' processing.
|
||||||
add(d, 0x3ff, d);
|
add(d, 0x3ff, d);
|
||||||
|
|
||||||
|
@ -1240,7 +1240,7 @@ void MacroAssembler::set_narrow_klass(Klass* k, Register d) {
|
||||||
// Relocation with special format (see relocInfo_sparc.hpp).
|
// Relocation with special format (see relocInfo_sparc.hpp).
|
||||||
relocate(rspec, 1);
|
relocate(rspec, 1);
|
||||||
// Assembler::sethi(encoded_k, d);
|
// Assembler::sethi(encoded_k, d);
|
||||||
emit_long( op(branch_op) | rd(d) | op2(sethi_op2) | hi22(encoded_k) );
|
emit_int32( op(branch_op) | rd(d) | op2(sethi_op2) | hi22(encoded_k) );
|
||||||
// Don't add relocation for 'add'. Do patching during 'sethi' processing.
|
// Don't add relocation for 'add'. Do patching during 'sethi' processing.
|
||||||
add(d, low10(encoded_k), d);
|
add(d, low10(encoded_k), d);
|
||||||
|
|
||||||
|
|
|
@ -259,7 +259,7 @@ address TemplateInterpreterGenerator::generate_result_handler_for(BasicType type
|
||||||
}
|
}
|
||||||
__ ret(); // return from interpreter activation
|
__ ret(); // return from interpreter activation
|
||||||
__ delayed()->restore(I5_savedSP, G0, SP); // remove interpreter frame
|
__ delayed()->restore(I5_savedSP, G0, SP); // remove interpreter frame
|
||||||
NOT_PRODUCT(__ emit_long(0);) // marker for disassembly
|
NOT_PRODUCT(__ emit_int32(0);) // marker for disassembly
|
||||||
return entry;
|
return entry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -182,7 +182,7 @@ int AbstractAssembler::code_fill_byte() {
|
||||||
// make this go away someday
|
// make this go away someday
|
||||||
void Assembler::emit_data(jint data, relocInfo::relocType rtype, int format) {
|
void Assembler::emit_data(jint data, relocInfo::relocType rtype, int format) {
|
||||||
if (rtype == relocInfo::none)
|
if (rtype == relocInfo::none)
|
||||||
emit_long(data);
|
emit_int32(data);
|
||||||
else emit_data(data, Relocation::spec_simple(rtype), format);
|
else emit_data(data, Relocation::spec_simple(rtype), format);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -202,7 +202,7 @@ void Assembler::emit_data(jint data, RelocationHolder const& rspec, int format)
|
||||||
else
|
else
|
||||||
code_section()->relocate(inst_mark(), rspec, format);
|
code_section()->relocate(inst_mark(), rspec, format);
|
||||||
}
|
}
|
||||||
emit_long(data);
|
emit_int32(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int encode(Register r) {
|
static int encode(Register r) {
|
||||||
|
@ -243,7 +243,7 @@ void Assembler::emit_arith(int op1, int op2, Register dst, int32_t imm32) {
|
||||||
} else {
|
} else {
|
||||||
emit_int8(op1);
|
emit_int8(op1);
|
||||||
emit_int8(op2 | encode(dst));
|
emit_int8(op2 | encode(dst));
|
||||||
emit_long(imm32);
|
emit_int32(imm32);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -254,7 +254,7 @@ void Assembler::emit_arith_imm32(int op1, int op2, Register dst, int32_t imm32)
|
||||||
assert((op1 & 0x02) == 0, "sign-extension bit should not be set");
|
assert((op1 & 0x02) == 0, "sign-extension bit should not be set");
|
||||||
emit_int8(op1);
|
emit_int8(op1);
|
||||||
emit_int8(op2 | encode(dst));
|
emit_int8(op2 | encode(dst));
|
||||||
emit_long(imm32);
|
emit_int32(imm32);
|
||||||
}
|
}
|
||||||
|
|
||||||
// immediate-to-memory forms
|
// immediate-to-memory forms
|
||||||
|
@ -268,7 +268,7 @@ void Assembler::emit_arith_operand(int op1, Register rm, Address adr, int32_t im
|
||||||
} else {
|
} else {
|
||||||
emit_int8(op1);
|
emit_int8(op1);
|
||||||
emit_operand(rm, adr, 4);
|
emit_operand(rm, adr, 4);
|
||||||
emit_long(imm32);
|
emit_int32(imm32);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -976,7 +976,7 @@ void Assembler::addr_nop_7() {
|
||||||
emit_int8(0x1F);
|
emit_int8(0x1F);
|
||||||
emit_int8((unsigned char)0x80);
|
emit_int8((unsigned char)0x80);
|
||||||
// emit_rm(cbuf, 0x2, EAX_enc, EAX_enc);
|
// emit_rm(cbuf, 0x2, EAX_enc, EAX_enc);
|
||||||
emit_long(0); // 32-bits offset (4 bytes)
|
emit_int32(0); // 32-bits offset (4 bytes)
|
||||||
}
|
}
|
||||||
|
|
||||||
void Assembler::addr_nop_8() {
|
void Assembler::addr_nop_8() {
|
||||||
|
@ -987,7 +987,7 @@ void Assembler::addr_nop_8() {
|
||||||
emit_int8((unsigned char)0x84);
|
emit_int8((unsigned char)0x84);
|
||||||
// emit_rm(cbuf, 0x2, EAX_enc, 0x4);
|
// emit_rm(cbuf, 0x2, EAX_enc, 0x4);
|
||||||
emit_int8(0x00); // emit_rm(cbuf, 0x0, EAX_enc, EAX_enc);
|
emit_int8(0x00); // emit_rm(cbuf, 0x0, EAX_enc, EAX_enc);
|
||||||
emit_long(0); // 32-bits offset (4 bytes)
|
emit_int32(0); // 32-bits offset (4 bytes)
|
||||||
}
|
}
|
||||||
|
|
||||||
void Assembler::addsd(XMMRegister dst, XMMRegister src) {
|
void Assembler::addsd(XMMRegister dst, XMMRegister src) {
|
||||||
|
@ -1076,7 +1076,7 @@ void Assembler::andl(Address dst, int32_t imm32) {
|
||||||
prefix(dst);
|
prefix(dst);
|
||||||
emit_int8((unsigned char)0x81);
|
emit_int8((unsigned char)0x81);
|
||||||
emit_operand(rsp, dst, 4);
|
emit_operand(rsp, dst, 4);
|
||||||
emit_long(imm32);
|
emit_int32(imm32);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Assembler::andl(Register dst, int32_t imm32) {
|
void Assembler::andl(Register dst, int32_t imm32) {
|
||||||
|
@ -1204,7 +1204,7 @@ void Assembler::cmpl(Address dst, int32_t imm32) {
|
||||||
prefix(dst);
|
prefix(dst);
|
||||||
emit_int8((unsigned char)0x81);
|
emit_int8((unsigned char)0x81);
|
||||||
emit_operand(rdi, dst, 4);
|
emit_operand(rdi, dst, 4);
|
||||||
emit_long(imm32);
|
emit_int32(imm32);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Assembler::cmpl(Register dst, int32_t imm32) {
|
void Assembler::cmpl(Register dst, int32_t imm32) {
|
||||||
|
@ -1408,7 +1408,7 @@ void Assembler::imull(Register dst, Register src, int value) {
|
||||||
} else {
|
} else {
|
||||||
emit_int8(0x69);
|
emit_int8(0x69);
|
||||||
emit_int8((unsigned char)(0xC0 | encode));
|
emit_int8((unsigned char)(0xC0 | encode));
|
||||||
emit_long(value);
|
emit_int32(value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1440,7 +1440,7 @@ void Assembler::jcc(Condition cc, Label& L, bool maybe_short) {
|
||||||
"must be 32bit offset (call4)");
|
"must be 32bit offset (call4)");
|
||||||
emit_int8(0x0F);
|
emit_int8(0x0F);
|
||||||
emit_int8((unsigned char)(0x80 | cc));
|
emit_int8((unsigned char)(0x80 | cc));
|
||||||
emit_long(offs - long_size);
|
emit_int32(offs - long_size);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Note: could eliminate cond. jumps to this jump if condition
|
// Note: could eliminate cond. jumps to this jump if condition
|
||||||
|
@ -1450,7 +1450,7 @@ void Assembler::jcc(Condition cc, Label& L, bool maybe_short) {
|
||||||
L.add_patch_at(code(), locator());
|
L.add_patch_at(code(), locator());
|
||||||
emit_int8(0x0F);
|
emit_int8(0x0F);
|
||||||
emit_int8((unsigned char)(0x80 | cc));
|
emit_int8((unsigned char)(0x80 | cc));
|
||||||
emit_long(0);
|
emit_int32(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1498,7 +1498,7 @@ void Assembler::jmp(Label& L, bool maybe_short) {
|
||||||
emit_int8((offs - short_size) & 0xFF);
|
emit_int8((offs - short_size) & 0xFF);
|
||||||
} else {
|
} else {
|
||||||
emit_int8((unsigned char)0xE9);
|
emit_int8((unsigned char)0xE9);
|
||||||
emit_long(offs - long_size);
|
emit_int32(offs - long_size);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// By default, forward jumps are always 32-bit displacements, since
|
// By default, forward jumps are always 32-bit displacements, since
|
||||||
|
@ -1508,7 +1508,7 @@ void Assembler::jmp(Label& L, bool maybe_short) {
|
||||||
InstructionMark im(this);
|
InstructionMark im(this);
|
||||||
L.add_patch_at(code(), locator());
|
L.add_patch_at(code(), locator());
|
||||||
emit_int8((unsigned char)0xE9);
|
emit_int8((unsigned char)0xE9);
|
||||||
emit_long(0);
|
emit_int32(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1732,7 +1732,7 @@ void Assembler::vmovdqu(Address dst, XMMRegister src) {
|
||||||
void Assembler::movl(Register dst, int32_t imm32) {
|
void Assembler::movl(Register dst, int32_t imm32) {
|
||||||
int encode = prefix_and_encode(dst->encoding());
|
int encode = prefix_and_encode(dst->encoding());
|
||||||
emit_int8((unsigned char)(0xB8 | encode));
|
emit_int8((unsigned char)(0xB8 | encode));
|
||||||
emit_long(imm32);
|
emit_int32(imm32);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Assembler::movl(Register dst, Register src) {
|
void Assembler::movl(Register dst, Register src) {
|
||||||
|
@ -1753,7 +1753,7 @@ void Assembler::movl(Address dst, int32_t imm32) {
|
||||||
prefix(dst);
|
prefix(dst);
|
||||||
emit_int8((unsigned char)0xC7);
|
emit_int8((unsigned char)0xC7);
|
||||||
emit_operand(rax, dst, 4);
|
emit_operand(rax, dst, 4);
|
||||||
emit_long(imm32);
|
emit_int32(imm32);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Assembler::movl(Address dst, Register src) {
|
void Assembler::movl(Address dst, Register src) {
|
||||||
|
@ -2468,6 +2468,26 @@ void Assembler::ptest(XMMRegister dst, XMMRegister src) {
|
||||||
emit_int8((unsigned char)(0xC0 | encode));
|
emit_int8((unsigned char)(0xC0 | encode));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Assembler::vptest(XMMRegister dst, Address src) {
|
||||||
|
assert(VM_Version::supports_avx(), "");
|
||||||
|
InstructionMark im(this);
|
||||||
|
bool vector256 = true;
|
||||||
|
assert(dst != xnoreg, "sanity");
|
||||||
|
int dst_enc = dst->encoding();
|
||||||
|
// swap src<->dst for encoding
|
||||||
|
vex_prefix(src, dst_enc, dst_enc, VEX_SIMD_66, VEX_OPCODE_0F_38, false, vector256);
|
||||||
|
emit_int8(0x17);
|
||||||
|
emit_operand(dst, src);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Assembler::vptest(XMMRegister dst, XMMRegister src) {
|
||||||
|
assert(VM_Version::supports_avx(), "");
|
||||||
|
bool vector256 = true;
|
||||||
|
int encode = vex_prefix_and_encode(dst, xnoreg, src, VEX_SIMD_66, vector256, VEX_OPCODE_0F_38);
|
||||||
|
emit_int8(0x17);
|
||||||
|
emit_int8((unsigned char)(0xC0 | encode));
|
||||||
|
}
|
||||||
|
|
||||||
void Assembler::punpcklbw(XMMRegister dst, Address src) {
|
void Assembler::punpcklbw(XMMRegister dst, Address src) {
|
||||||
NOT_LP64(assert(VM_Version::supports_sse2(), ""));
|
NOT_LP64(assert(VM_Version::supports_sse2(), ""));
|
||||||
assert((UseAVX > 0), "SSE mode requires address alignment 16 bytes");
|
assert((UseAVX > 0), "SSE mode requires address alignment 16 bytes");
|
||||||
|
@ -2499,7 +2519,7 @@ void Assembler::push(int32_t imm32) {
|
||||||
// in 64bits we push 64bits onto the stack but only
|
// in 64bits we push 64bits onto the stack but only
|
||||||
// take a 32bit immediate
|
// take a 32bit immediate
|
||||||
emit_int8(0x68);
|
emit_int8(0x68);
|
||||||
emit_long(imm32);
|
emit_int32(imm32);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Assembler::push(Register src) {
|
void Assembler::push(Register src) {
|
||||||
|
@ -2544,12 +2564,18 @@ void Assembler::rep_mov() {
|
||||||
emit_int8((unsigned char)0xA5);
|
emit_int8((unsigned char)0xA5);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// sets rcx bytes with rax, value at [edi]
|
||||||
|
void Assembler::rep_stosb() {
|
||||||
|
emit_int8((unsigned char)0xF3); // REP
|
||||||
|
LP64_ONLY(prefix(REX_W));
|
||||||
|
emit_int8((unsigned char)0xAA); // STOSB
|
||||||
|
}
|
||||||
|
|
||||||
// sets rcx pointer sized words with rax, value at [edi]
|
// sets rcx pointer sized words with rax, value at [edi]
|
||||||
// generic
|
// generic
|
||||||
void Assembler::rep_set() { // rep_set
|
void Assembler::rep_stos() {
|
||||||
emit_int8((unsigned char)0xF3);
|
emit_int8((unsigned char)0xF3); // REP
|
||||||
// STOSQ
|
LP64_ONLY(prefix(REX_W)); // LP64:STOSQ, LP32:STOSD
|
||||||
LP64_ONLY(prefix(REX_W));
|
|
||||||
emit_int8((unsigned char)0xAB);
|
emit_int8((unsigned char)0xAB);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2785,7 +2811,7 @@ void Assembler::testl(Register dst, int32_t imm32) {
|
||||||
emit_int8((unsigned char)0xF7);
|
emit_int8((unsigned char)0xF7);
|
||||||
emit_int8((unsigned char)(0xC0 | encode));
|
emit_int8((unsigned char)(0xC0 | encode));
|
||||||
}
|
}
|
||||||
emit_long(imm32);
|
emit_int32(imm32);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Assembler::testl(Register dst, Register src) {
|
void Assembler::testl(Register dst, Register src) {
|
||||||
|
@ -3650,6 +3676,15 @@ void Assembler::vextracti128h(Address dst, XMMRegister src) {
|
||||||
emit_int8(0x01);
|
emit_int8(0x01);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// duplicate 4-bytes integer data from src into 8 locations in dest
|
||||||
|
void Assembler::vpbroadcastd(XMMRegister dst, XMMRegister src) {
|
||||||
|
assert(VM_Version::supports_avx2(), "");
|
||||||
|
bool vector256 = true;
|
||||||
|
int encode = vex_prefix_and_encode(dst, xnoreg, src, VEX_SIMD_66, vector256, VEX_OPCODE_0F_38);
|
||||||
|
emit_int8(0x58);
|
||||||
|
emit_int8((unsigned char)(0xC0 | encode));
|
||||||
|
}
|
||||||
|
|
||||||
void Assembler::vzeroupper() {
|
void Assembler::vzeroupper() {
|
||||||
assert(VM_Version::supports_avx(), "");
|
assert(VM_Version::supports_avx(), "");
|
||||||
(void)vex_prefix_and_encode(xmm0, xmm0, xmm0, VEX_SIMD_NONE);
|
(void)vex_prefix_and_encode(xmm0, xmm0, xmm0, VEX_SIMD_NONE);
|
||||||
|
@ -4720,7 +4755,7 @@ void Assembler::andq(Address dst, int32_t imm32) {
|
||||||
prefixq(dst);
|
prefixq(dst);
|
||||||
emit_int8((unsigned char)0x81);
|
emit_int8((unsigned char)0x81);
|
||||||
emit_operand(rsp, dst, 4);
|
emit_operand(rsp, dst, 4);
|
||||||
emit_long(imm32);
|
emit_int32(imm32);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Assembler::andq(Register dst, int32_t imm32) {
|
void Assembler::andq(Register dst, int32_t imm32) {
|
||||||
|
@ -4793,7 +4828,7 @@ void Assembler::cmpq(Address dst, int32_t imm32) {
|
||||||
prefixq(dst);
|
prefixq(dst);
|
||||||
emit_int8((unsigned char)0x81);
|
emit_int8((unsigned char)0x81);
|
||||||
emit_operand(rdi, dst, 4);
|
emit_operand(rdi, dst, 4);
|
||||||
emit_long(imm32);
|
emit_int32(imm32);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Assembler::cmpq(Register dst, int32_t imm32) {
|
void Assembler::cmpq(Register dst, int32_t imm32) {
|
||||||
|
@ -4932,7 +4967,7 @@ void Assembler::imulq(Register dst, Register src, int value) {
|
||||||
} else {
|
} else {
|
||||||
emit_int8(0x69);
|
emit_int8(0x69);
|
||||||
emit_int8((unsigned char)(0xC0 | encode));
|
emit_int8((unsigned char)(0xC0 | encode));
|
||||||
emit_long(value);
|
emit_int32(value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5085,7 +5120,7 @@ void Assembler::movslq(Register dst, int32_t imm32) {
|
||||||
InstructionMark im(this);
|
InstructionMark im(this);
|
||||||
int encode = prefixq_and_encode(dst->encoding());
|
int encode = prefixq_and_encode(dst->encoding());
|
||||||
emit_int8((unsigned char)(0xC7 | encode));
|
emit_int8((unsigned char)(0xC7 | encode));
|
||||||
emit_long(imm32);
|
emit_int32(imm32);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Assembler::movslq(Address dst, int32_t imm32) {
|
void Assembler::movslq(Address dst, int32_t imm32) {
|
||||||
|
@ -5094,7 +5129,7 @@ void Assembler::movslq(Address dst, int32_t imm32) {
|
||||||
prefixq(dst);
|
prefixq(dst);
|
||||||
emit_int8((unsigned char)0xC7);
|
emit_int8((unsigned char)0xC7);
|
||||||
emit_operand(rax, dst, 4);
|
emit_operand(rax, dst, 4);
|
||||||
emit_long(imm32);
|
emit_int32(imm32);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Assembler::movslq(Register dst, Address src) {
|
void Assembler::movslq(Register dst, Address src) {
|
||||||
|
@ -5172,7 +5207,7 @@ void Assembler::orq(Address dst, int32_t imm32) {
|
||||||
prefixq(dst);
|
prefixq(dst);
|
||||||
emit_int8((unsigned char)0x81);
|
emit_int8((unsigned char)0x81);
|
||||||
emit_operand(rcx, dst, 4);
|
emit_operand(rcx, dst, 4);
|
||||||
emit_long(imm32);
|
emit_int32(imm32);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Assembler::orq(Register dst, int32_t imm32) {
|
void Assembler::orq(Register dst, int32_t imm32) {
|
||||||
|
@ -5407,7 +5442,7 @@ void Assembler::testq(Register dst, int32_t imm32) {
|
||||||
emit_int8((unsigned char)0xF7);
|
emit_int8((unsigned char)0xF7);
|
||||||
emit_int8((unsigned char)(0xC0 | encode));
|
emit_int8((unsigned char)(0xC0 | encode));
|
||||||
}
|
}
|
||||||
emit_long(imm32);
|
emit_int32(imm32);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Assembler::testq(Register dst, Register src) {
|
void Assembler::testq(Register dst, Register src) {
|
||||||
|
|
|
@ -832,7 +832,8 @@ private:
|
||||||
|
|
||||||
// These do register sized moves/scans
|
// These do register sized moves/scans
|
||||||
void rep_mov();
|
void rep_mov();
|
||||||
void rep_set();
|
void rep_stos();
|
||||||
|
void rep_stosb();
|
||||||
void repne_scan();
|
void repne_scan();
|
||||||
#ifdef _LP64
|
#ifdef _LP64
|
||||||
void repne_scanl();
|
void repne_scanl();
|
||||||
|
@ -1443,9 +1444,12 @@ private:
|
||||||
// Shift Right by bytes Logical DoubleQuadword Immediate
|
// Shift Right by bytes Logical DoubleQuadword Immediate
|
||||||
void psrldq(XMMRegister dst, int shift);
|
void psrldq(XMMRegister dst, int shift);
|
||||||
|
|
||||||
// Logical Compare Double Quadword
|
// Logical Compare 128bit
|
||||||
void ptest(XMMRegister dst, XMMRegister src);
|
void ptest(XMMRegister dst, XMMRegister src);
|
||||||
void ptest(XMMRegister dst, Address src);
|
void ptest(XMMRegister dst, Address src);
|
||||||
|
// Logical Compare 256bit
|
||||||
|
void vptest(XMMRegister dst, XMMRegister src);
|
||||||
|
void vptest(XMMRegister dst, Address src);
|
||||||
|
|
||||||
// Interleave Low Bytes
|
// Interleave Low Bytes
|
||||||
void punpcklbw(XMMRegister dst, XMMRegister src);
|
void punpcklbw(XMMRegister dst, XMMRegister src);
|
||||||
|
@ -1753,6 +1757,9 @@ private:
|
||||||
void vextractf128h(Address dst, XMMRegister src);
|
void vextractf128h(Address dst, XMMRegister src);
|
||||||
void vextracti128h(Address dst, XMMRegister src);
|
void vextracti128h(Address dst, XMMRegister src);
|
||||||
|
|
||||||
|
// duplicate 4-bytes integer data from src into 8 locations in dest
|
||||||
|
void vpbroadcastd(XMMRegister dst, XMMRegister src);
|
||||||
|
|
||||||
// AVX instruction which is used to clear upper 128 bits of YMM registers and
|
// AVX instruction which is used to clear upper 128 bits of YMM registers and
|
||||||
// to avoid transaction penalty between AVX and SSE states. There is no
|
// to avoid transaction penalty between AVX and SSE states. There is no
|
||||||
// penalty if legacy SSE instructions are encoded using VEX prefix because
|
// penalty if legacy SSE instructions are encoded using VEX prefix because
|
||||||
|
|
|
@ -120,6 +120,9 @@ define_pd_global(intx, CMSYoungGenPerWorker, 64*M); // default max size of CMS
|
||||||
product(bool, UseUnalignedLoadStores, false, \
|
product(bool, UseUnalignedLoadStores, false, \
|
||||||
"Use SSE2 MOVDQU instruction for Arraycopy") \
|
"Use SSE2 MOVDQU instruction for Arraycopy") \
|
||||||
\
|
\
|
||||||
|
product(bool, UseFastStosb, false, \
|
||||||
|
"Use fast-string operation for zeroing: rep stosb") \
|
||||||
|
\
|
||||||
/* assembler */ \
|
/* assembler */ \
|
||||||
product(bool, Use486InstrsOnly, false, \
|
product(bool, Use486InstrsOnly, false, \
|
||||||
"Use 80486 Compliant instruction subset") \
|
"Use 80486 Compliant instruction subset") \
|
||||||
|
|
|
@ -2540,7 +2540,7 @@ void MacroAssembler::jump_cc(Condition cc, AddressLiteral dst) {
|
||||||
// 0000 1111 1000 tttn #32-bit disp
|
// 0000 1111 1000 tttn #32-bit disp
|
||||||
emit_int8(0x0F);
|
emit_int8(0x0F);
|
||||||
emit_int8((unsigned char)(0x80 | cc));
|
emit_int8((unsigned char)(0x80 | cc));
|
||||||
emit_long(offs - long_size);
|
emit_int32(offs - long_size);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
#ifdef ASSERT
|
#ifdef ASSERT
|
||||||
|
@ -5224,6 +5224,22 @@ void MacroAssembler::verified_entry(int framesize, bool stack_bang, bool fp_mode
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MacroAssembler::clear_mem(Register base, Register cnt, Register tmp) {
|
||||||
|
// cnt - number of qwords (8-byte words).
|
||||||
|
// base - start address, qword aligned.
|
||||||
|
assert(base==rdi, "base register must be edi for rep stos");
|
||||||
|
assert(tmp==rax, "tmp register must be eax for rep stos");
|
||||||
|
assert(cnt==rcx, "cnt register must be ecx for rep stos");
|
||||||
|
|
||||||
|
xorptr(tmp, tmp);
|
||||||
|
if (UseFastStosb) {
|
||||||
|
shlptr(cnt,3); // convert to number of bytes
|
||||||
|
rep_stosb();
|
||||||
|
} else {
|
||||||
|
NOT_LP64(shlptr(cnt,1);) // convert to number of dwords for 32-bit VM
|
||||||
|
rep_stos();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// IndexOf for constant substrings with size >= 8 chars
|
// IndexOf for constant substrings with size >= 8 chars
|
||||||
// which don't need to be loaded through stack.
|
// which don't need to be loaded through stack.
|
||||||
|
@ -5659,42 +5675,114 @@ void MacroAssembler::string_compare(Register str1, Register str2,
|
||||||
testl(cnt2, cnt2);
|
testl(cnt2, cnt2);
|
||||||
jcc(Assembler::zero, LENGTH_DIFF_LABEL);
|
jcc(Assembler::zero, LENGTH_DIFF_LABEL);
|
||||||
|
|
||||||
// Load first characters
|
// Compare first characters
|
||||||
load_unsigned_short(result, Address(str1, 0));
|
load_unsigned_short(result, Address(str1, 0));
|
||||||
load_unsigned_short(cnt1, Address(str2, 0));
|
load_unsigned_short(cnt1, Address(str2, 0));
|
||||||
|
|
||||||
// Compare first characters
|
|
||||||
subl(result, cnt1);
|
subl(result, cnt1);
|
||||||
jcc(Assembler::notZero, POP_LABEL);
|
jcc(Assembler::notZero, POP_LABEL);
|
||||||
decrementl(cnt2);
|
cmpl(cnt2, 1);
|
||||||
jcc(Assembler::zero, LENGTH_DIFF_LABEL);
|
jcc(Assembler::equal, LENGTH_DIFF_LABEL);
|
||||||
|
|
||||||
{
|
// Check if the strings start at the same location.
|
||||||
// Check after comparing first character to see if strings are equivalent
|
cmpptr(str1, str2);
|
||||||
Label LSkip2;
|
jcc(Assembler::equal, LENGTH_DIFF_LABEL);
|
||||||
// Check if the strings start at same location
|
|
||||||
cmpptr(str1, str2);
|
|
||||||
jccb(Assembler::notEqual, LSkip2);
|
|
||||||
|
|
||||||
// Check if the length difference is zero (from stack)
|
|
||||||
cmpl(Address(rsp, 0), 0x0);
|
|
||||||
jcc(Assembler::equal, LENGTH_DIFF_LABEL);
|
|
||||||
|
|
||||||
// Strings might not be equivalent
|
|
||||||
bind(LSkip2);
|
|
||||||
}
|
|
||||||
|
|
||||||
Address::ScaleFactor scale = Address::times_2;
|
Address::ScaleFactor scale = Address::times_2;
|
||||||
int stride = 8;
|
int stride = 8;
|
||||||
|
|
||||||
// Advance to next element
|
if (UseAVX >= 2) {
|
||||||
addptr(str1, 16/stride);
|
Label COMPARE_WIDE_VECTORS, VECTOR_NOT_EQUAL, COMPARE_WIDE_TAIL, COMPARE_SMALL_STR;
|
||||||
addptr(str2, 16/stride);
|
Label COMPARE_WIDE_VECTORS_LOOP, COMPARE_16_CHARS, COMPARE_INDEX_CHAR;
|
||||||
|
Label COMPARE_TAIL_LONG;
|
||||||
|
int pcmpmask = 0x19;
|
||||||
|
|
||||||
if (UseSSE42Intrinsics) {
|
// Setup to compare 16-chars (32-bytes) vectors,
|
||||||
|
// start from first character again because it has aligned address.
|
||||||
|
int stride2 = 16;
|
||||||
|
int adr_stride = stride << scale;
|
||||||
|
int adr_stride2 = stride2 << scale;
|
||||||
|
|
||||||
|
assert(result == rax && cnt2 == rdx && cnt1 == rcx, "pcmpestri");
|
||||||
|
// rax and rdx are used by pcmpestri as elements counters
|
||||||
|
movl(result, cnt2);
|
||||||
|
andl(cnt2, ~(stride2-1)); // cnt2 holds the vector count
|
||||||
|
jcc(Assembler::zero, COMPARE_TAIL_LONG);
|
||||||
|
|
||||||
|
// fast path : compare first 2 8-char vectors.
|
||||||
|
bind(COMPARE_16_CHARS);
|
||||||
|
movdqu(vec1, Address(str1, 0));
|
||||||
|
pcmpestri(vec1, Address(str2, 0), pcmpmask);
|
||||||
|
jccb(Assembler::below, COMPARE_INDEX_CHAR);
|
||||||
|
|
||||||
|
movdqu(vec1, Address(str1, adr_stride));
|
||||||
|
pcmpestri(vec1, Address(str2, adr_stride), pcmpmask);
|
||||||
|
jccb(Assembler::aboveEqual, COMPARE_WIDE_VECTORS);
|
||||||
|
addl(cnt1, stride);
|
||||||
|
|
||||||
|
// Compare the characters at index in cnt1
|
||||||
|
bind(COMPARE_INDEX_CHAR); //cnt1 has the offset of the mismatching character
|
||||||
|
load_unsigned_short(result, Address(str1, cnt1, scale));
|
||||||
|
load_unsigned_short(cnt2, Address(str2, cnt1, scale));
|
||||||
|
subl(result, cnt2);
|
||||||
|
jmp(POP_LABEL);
|
||||||
|
|
||||||
|
// Setup the registers to start vector comparison loop
|
||||||
|
bind(COMPARE_WIDE_VECTORS);
|
||||||
|
lea(str1, Address(str1, result, scale));
|
||||||
|
lea(str2, Address(str2, result, scale));
|
||||||
|
subl(result, stride2);
|
||||||
|
subl(cnt2, stride2);
|
||||||
|
jccb(Assembler::zero, COMPARE_WIDE_TAIL);
|
||||||
|
negptr(result);
|
||||||
|
|
||||||
|
// In a loop, compare 16-chars (32-bytes) at once using (vpxor+vptest)
|
||||||
|
bind(COMPARE_WIDE_VECTORS_LOOP);
|
||||||
|
vmovdqu(vec1, Address(str1, result, scale));
|
||||||
|
vpxor(vec1, Address(str2, result, scale));
|
||||||
|
vptest(vec1, vec1);
|
||||||
|
jccb(Assembler::notZero, VECTOR_NOT_EQUAL);
|
||||||
|
addptr(result, stride2);
|
||||||
|
subl(cnt2, stride2);
|
||||||
|
jccb(Assembler::notZero, COMPARE_WIDE_VECTORS_LOOP);
|
||||||
|
|
||||||
|
// compare wide vectors tail
|
||||||
|
bind(COMPARE_WIDE_TAIL);
|
||||||
|
testptr(result, result);
|
||||||
|
jccb(Assembler::zero, LENGTH_DIFF_LABEL);
|
||||||
|
|
||||||
|
movl(result, stride2);
|
||||||
|
movl(cnt2, result);
|
||||||
|
negptr(result);
|
||||||
|
jmpb(COMPARE_WIDE_VECTORS_LOOP);
|
||||||
|
|
||||||
|
// Identifies the mismatching (higher or lower)16-bytes in the 32-byte vectors.
|
||||||
|
bind(VECTOR_NOT_EQUAL);
|
||||||
|
lea(str1, Address(str1, result, scale));
|
||||||
|
lea(str2, Address(str2, result, scale));
|
||||||
|
jmp(COMPARE_16_CHARS);
|
||||||
|
|
||||||
|
// Compare tail chars, length between 1 to 15 chars
|
||||||
|
bind(COMPARE_TAIL_LONG);
|
||||||
|
movl(cnt2, result);
|
||||||
|
cmpl(cnt2, stride);
|
||||||
|
jccb(Assembler::less, COMPARE_SMALL_STR);
|
||||||
|
|
||||||
|
movdqu(vec1, Address(str1, 0));
|
||||||
|
pcmpestri(vec1, Address(str2, 0), pcmpmask);
|
||||||
|
jcc(Assembler::below, COMPARE_INDEX_CHAR);
|
||||||
|
subptr(cnt2, stride);
|
||||||
|
jccb(Assembler::zero, LENGTH_DIFF_LABEL);
|
||||||
|
lea(str1, Address(str1, result, scale));
|
||||||
|
lea(str2, Address(str2, result, scale));
|
||||||
|
negptr(cnt2);
|
||||||
|
jmpb(WHILE_HEAD_LABEL);
|
||||||
|
|
||||||
|
bind(COMPARE_SMALL_STR);
|
||||||
|
} else if (UseSSE42Intrinsics) {
|
||||||
Label COMPARE_WIDE_VECTORS, VECTOR_NOT_EQUAL, COMPARE_TAIL;
|
Label COMPARE_WIDE_VECTORS, VECTOR_NOT_EQUAL, COMPARE_TAIL;
|
||||||
int pcmpmask = 0x19;
|
int pcmpmask = 0x19;
|
||||||
// Setup to compare 16-byte vectors
|
// Setup to compare 8-char (16-byte) vectors,
|
||||||
|
// start from first character again because it has aligned address.
|
||||||
movl(result, cnt2);
|
movl(result, cnt2);
|
||||||
andl(cnt2, ~(stride - 1)); // cnt2 holds the vector count
|
andl(cnt2, ~(stride - 1)); // cnt2 holds the vector count
|
||||||
jccb(Assembler::zero, COMPARE_TAIL);
|
jccb(Assembler::zero, COMPARE_TAIL);
|
||||||
|
@ -5726,7 +5814,7 @@ void MacroAssembler::string_compare(Register str1, Register str2,
|
||||||
jccb(Assembler::notZero, COMPARE_WIDE_VECTORS);
|
jccb(Assembler::notZero, COMPARE_WIDE_VECTORS);
|
||||||
|
|
||||||
// compare wide vectors tail
|
// compare wide vectors tail
|
||||||
testl(result, result);
|
testptr(result, result);
|
||||||
jccb(Assembler::zero, LENGTH_DIFF_LABEL);
|
jccb(Assembler::zero, LENGTH_DIFF_LABEL);
|
||||||
|
|
||||||
movl(cnt2, stride);
|
movl(cnt2, stride);
|
||||||
|
@ -5738,21 +5826,20 @@ void MacroAssembler::string_compare(Register str1, Register str2,
|
||||||
|
|
||||||
// Mismatched characters in the vectors
|
// Mismatched characters in the vectors
|
||||||
bind(VECTOR_NOT_EQUAL);
|
bind(VECTOR_NOT_EQUAL);
|
||||||
addptr(result, cnt1);
|
addptr(cnt1, result);
|
||||||
movptr(cnt2, result);
|
load_unsigned_short(result, Address(str1, cnt1, scale));
|
||||||
load_unsigned_short(result, Address(str1, cnt2, scale));
|
load_unsigned_short(cnt2, Address(str2, cnt1, scale));
|
||||||
load_unsigned_short(cnt1, Address(str2, cnt2, scale));
|
subl(result, cnt2);
|
||||||
subl(result, cnt1);
|
|
||||||
jmpb(POP_LABEL);
|
jmpb(POP_LABEL);
|
||||||
|
|
||||||
bind(COMPARE_TAIL); // limit is zero
|
bind(COMPARE_TAIL); // limit is zero
|
||||||
movl(cnt2, result);
|
movl(cnt2, result);
|
||||||
// Fallthru to tail compare
|
// Fallthru to tail compare
|
||||||
}
|
}
|
||||||
|
|
||||||
// Shift str2 and str1 to the end of the arrays, negate min
|
// Shift str2 and str1 to the end of the arrays, negate min
|
||||||
lea(str1, Address(str1, cnt2, scale, 0));
|
lea(str1, Address(str1, cnt2, scale));
|
||||||
lea(str2, Address(str2, cnt2, scale, 0));
|
lea(str2, Address(str2, cnt2, scale));
|
||||||
|
decrementl(cnt2); // first character was compared already
|
||||||
negptr(cnt2);
|
negptr(cnt2);
|
||||||
|
|
||||||
// Compare the rest of the elements
|
// Compare the rest of the elements
|
||||||
|
@ -5817,7 +5904,44 @@ void MacroAssembler::char_arrays_equals(bool is_array_equ, Register ary1, Regist
|
||||||
shll(limit, 1); // byte count != 0
|
shll(limit, 1); // byte count != 0
|
||||||
movl(result, limit); // copy
|
movl(result, limit); // copy
|
||||||
|
|
||||||
if (UseSSE42Intrinsics) {
|
if (UseAVX >= 2) {
|
||||||
|
// With AVX2, use 32-byte vector compare
|
||||||
|
Label COMPARE_WIDE_VECTORS, COMPARE_TAIL;
|
||||||
|
|
||||||
|
// Compare 32-byte vectors
|
||||||
|
andl(result, 0x0000001e); // tail count (in bytes)
|
||||||
|
andl(limit, 0xffffffe0); // vector count (in bytes)
|
||||||
|
jccb(Assembler::zero, COMPARE_TAIL);
|
||||||
|
|
||||||
|
lea(ary1, Address(ary1, limit, Address::times_1));
|
||||||
|
lea(ary2, Address(ary2, limit, Address::times_1));
|
||||||
|
negptr(limit);
|
||||||
|
|
||||||
|
bind(COMPARE_WIDE_VECTORS);
|
||||||
|
vmovdqu(vec1, Address(ary1, limit, Address::times_1));
|
||||||
|
vmovdqu(vec2, Address(ary2, limit, Address::times_1));
|
||||||
|
vpxor(vec1, vec2);
|
||||||
|
|
||||||
|
vptest(vec1, vec1);
|
||||||
|
jccb(Assembler::notZero, FALSE_LABEL);
|
||||||
|
addptr(limit, 32);
|
||||||
|
jcc(Assembler::notZero, COMPARE_WIDE_VECTORS);
|
||||||
|
|
||||||
|
testl(result, result);
|
||||||
|
jccb(Assembler::zero, TRUE_LABEL);
|
||||||
|
|
||||||
|
vmovdqu(vec1, Address(ary1, result, Address::times_1, -32));
|
||||||
|
vmovdqu(vec2, Address(ary2, result, Address::times_1, -32));
|
||||||
|
vpxor(vec1, vec2);
|
||||||
|
|
||||||
|
vptest(vec1, vec1);
|
||||||
|
jccb(Assembler::notZero, FALSE_LABEL);
|
||||||
|
jmpb(TRUE_LABEL);
|
||||||
|
|
||||||
|
bind(COMPARE_TAIL); // limit is zero
|
||||||
|
movl(limit, result);
|
||||||
|
// Fallthru to tail compare
|
||||||
|
} else if (UseSSE42Intrinsics) {
|
||||||
// With SSE4.2, use double quad vector compare
|
// With SSE4.2, use double quad vector compare
|
||||||
Label COMPARE_WIDE_VECTORS, COMPARE_TAIL;
|
Label COMPARE_WIDE_VECTORS, COMPARE_TAIL;
|
||||||
|
|
||||||
|
@ -5995,29 +6119,53 @@ void MacroAssembler::generate_fill(BasicType t, bool aligned,
|
||||||
{
|
{
|
||||||
assert( UseSSE >= 2, "supported cpu only" );
|
assert( UseSSE >= 2, "supported cpu only" );
|
||||||
Label L_fill_32_bytes_loop, L_check_fill_8_bytes, L_fill_8_bytes_loop, L_fill_8_bytes;
|
Label L_fill_32_bytes_loop, L_check_fill_8_bytes, L_fill_8_bytes_loop, L_fill_8_bytes;
|
||||||
// Fill 32-byte chunks
|
|
||||||
movdl(xtmp, value);
|
movdl(xtmp, value);
|
||||||
pshufd(xtmp, xtmp, 0);
|
if (UseAVX >= 2 && UseUnalignedLoadStores) {
|
||||||
|
// Fill 64-byte chunks
|
||||||
|
Label L_fill_64_bytes_loop, L_check_fill_32_bytes;
|
||||||
|
vpbroadcastd(xtmp, xtmp);
|
||||||
|
|
||||||
subl(count, 8 << shift);
|
subl(count, 16 << shift);
|
||||||
jcc(Assembler::less, L_check_fill_8_bytes);
|
jcc(Assembler::less, L_check_fill_32_bytes);
|
||||||
align(16);
|
align(16);
|
||||||
|
|
||||||
BIND(L_fill_32_bytes_loop);
|
BIND(L_fill_64_bytes_loop);
|
||||||
|
vmovdqu(Address(to, 0), xtmp);
|
||||||
|
vmovdqu(Address(to, 32), xtmp);
|
||||||
|
addptr(to, 64);
|
||||||
|
subl(count, 16 << shift);
|
||||||
|
jcc(Assembler::greaterEqual, L_fill_64_bytes_loop);
|
||||||
|
|
||||||
if (UseUnalignedLoadStores) {
|
BIND(L_check_fill_32_bytes);
|
||||||
movdqu(Address(to, 0), xtmp);
|
addl(count, 8 << shift);
|
||||||
movdqu(Address(to, 16), xtmp);
|
jccb(Assembler::less, L_check_fill_8_bytes);
|
||||||
|
vmovdqu(Address(to, 0), xtmp);
|
||||||
|
addptr(to, 32);
|
||||||
|
subl(count, 8 << shift);
|
||||||
} else {
|
} else {
|
||||||
movq(Address(to, 0), xtmp);
|
// Fill 32-byte chunks
|
||||||
movq(Address(to, 8), xtmp);
|
pshufd(xtmp, xtmp, 0);
|
||||||
movq(Address(to, 16), xtmp);
|
|
||||||
movq(Address(to, 24), xtmp);
|
|
||||||
}
|
|
||||||
|
|
||||||
addptr(to, 32);
|
subl(count, 8 << shift);
|
||||||
subl(count, 8 << shift);
|
jcc(Assembler::less, L_check_fill_8_bytes);
|
||||||
jcc(Assembler::greaterEqual, L_fill_32_bytes_loop);
|
align(16);
|
||||||
|
|
||||||
|
BIND(L_fill_32_bytes_loop);
|
||||||
|
|
||||||
|
if (UseUnalignedLoadStores) {
|
||||||
|
movdqu(Address(to, 0), xtmp);
|
||||||
|
movdqu(Address(to, 16), xtmp);
|
||||||
|
} else {
|
||||||
|
movq(Address(to, 0), xtmp);
|
||||||
|
movq(Address(to, 8), xtmp);
|
||||||
|
movq(Address(to, 16), xtmp);
|
||||||
|
movq(Address(to, 24), xtmp);
|
||||||
|
}
|
||||||
|
|
||||||
|
addptr(to, 32);
|
||||||
|
subl(count, 8 << shift);
|
||||||
|
jcc(Assembler::greaterEqual, L_fill_32_bytes_loop);
|
||||||
|
}
|
||||||
BIND(L_check_fill_8_bytes);
|
BIND(L_check_fill_8_bytes);
|
||||||
addl(count, 8 << shift);
|
addl(count, 8 << shift);
|
||||||
jccb(Assembler::zero, L_exit);
|
jccb(Assembler::zero, L_exit);
|
||||||
|
|
|
@ -1011,6 +1011,10 @@ public:
|
||||||
Assembler::vxorpd(dst, nds, src, vector256);
|
Assembler::vxorpd(dst, nds, src, vector256);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Simple version for AVX2 256bit vectors
|
||||||
|
void vpxor(XMMRegister dst, XMMRegister src) { Assembler::vpxor(dst, dst, src, true); }
|
||||||
|
void vpxor(XMMRegister dst, Address src) { Assembler::vpxor(dst, dst, src, true); }
|
||||||
|
|
||||||
// Move packed integer values from low 128 bit to hign 128 bit in 256 bit vector.
|
// Move packed integer values from low 128 bit to hign 128 bit in 256 bit vector.
|
||||||
void vinserti128h(XMMRegister dst, XMMRegister nds, XMMRegister src) {
|
void vinserti128h(XMMRegister dst, XMMRegister nds, XMMRegister src) {
|
||||||
if (UseAVX > 1) // vinserti128h is available only in AVX2
|
if (UseAVX > 1) // vinserti128h is available only in AVX2
|
||||||
|
@ -1096,6 +1100,9 @@ public:
|
||||||
// C2 compiled method's prolog code.
|
// C2 compiled method's prolog code.
|
||||||
void verified_entry(int framesize, bool stack_bang, bool fp_mode_24b);
|
void verified_entry(int framesize, bool stack_bang, bool fp_mode_24b);
|
||||||
|
|
||||||
|
// clear memory of size 'cnt' qwords, starting at 'base'.
|
||||||
|
void clear_mem(Register base, Register cnt, Register rtmp);
|
||||||
|
|
||||||
// IndexOf strings.
|
// IndexOf strings.
|
||||||
// Small strings are loaded through stack if they cross page boundary.
|
// Small strings are loaded through stack if they cross page boundary.
|
||||||
void string_indexof(Register str1, Register str2,
|
void string_indexof(Register str1, Register str2,
|
||||||
|
|
|
@ -796,16 +796,22 @@ class StubGenerator: public StubCodeGenerator {
|
||||||
__ align(OptoLoopAlignment);
|
__ align(OptoLoopAlignment);
|
||||||
__ BIND(L_copy_64_bytes_loop);
|
__ BIND(L_copy_64_bytes_loop);
|
||||||
|
|
||||||
if(UseUnalignedLoadStores) {
|
if (UseUnalignedLoadStores) {
|
||||||
__ movdqu(xmm0, Address(from, 0));
|
if (UseAVX >= 2) {
|
||||||
__ movdqu(Address(from, to_from, Address::times_1, 0), xmm0);
|
__ vmovdqu(xmm0, Address(from, 0));
|
||||||
__ movdqu(xmm1, Address(from, 16));
|
__ vmovdqu(Address(from, to_from, Address::times_1, 0), xmm0);
|
||||||
__ movdqu(Address(from, to_from, Address::times_1, 16), xmm1);
|
__ vmovdqu(xmm1, Address(from, 32));
|
||||||
__ movdqu(xmm2, Address(from, 32));
|
__ vmovdqu(Address(from, to_from, Address::times_1, 32), xmm1);
|
||||||
__ movdqu(Address(from, to_from, Address::times_1, 32), xmm2);
|
} else {
|
||||||
__ movdqu(xmm3, Address(from, 48));
|
__ movdqu(xmm0, Address(from, 0));
|
||||||
__ movdqu(Address(from, to_from, Address::times_1, 48), xmm3);
|
__ movdqu(Address(from, to_from, Address::times_1, 0), xmm0);
|
||||||
|
__ movdqu(xmm1, Address(from, 16));
|
||||||
|
__ movdqu(Address(from, to_from, Address::times_1, 16), xmm1);
|
||||||
|
__ movdqu(xmm2, Address(from, 32));
|
||||||
|
__ movdqu(Address(from, to_from, Address::times_1, 32), xmm2);
|
||||||
|
__ movdqu(xmm3, Address(from, 48));
|
||||||
|
__ movdqu(Address(from, to_from, Address::times_1, 48), xmm3);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
__ movq(xmm0, Address(from, 0));
|
__ movq(xmm0, Address(from, 0));
|
||||||
__ movq(Address(from, to_from, Address::times_1, 0), xmm0);
|
__ movq(Address(from, to_from, Address::times_1, 0), xmm0);
|
||||||
|
|
|
@ -1286,23 +1286,54 @@ class StubGenerator: public StubCodeGenerator {
|
||||||
// end_to - destination array end address
|
// end_to - destination array end address
|
||||||
// qword_count - 64-bits element count, negative
|
// qword_count - 64-bits element count, negative
|
||||||
// to - scratch
|
// to - scratch
|
||||||
// L_copy_32_bytes - entry label
|
// L_copy_bytes - entry label
|
||||||
// L_copy_8_bytes - exit label
|
// L_copy_8_bytes - exit label
|
||||||
//
|
//
|
||||||
void copy_32_bytes_forward(Register end_from, Register end_to,
|
void copy_bytes_forward(Register end_from, Register end_to,
|
||||||
Register qword_count, Register to,
|
Register qword_count, Register to,
|
||||||
Label& L_copy_32_bytes, Label& L_copy_8_bytes) {
|
Label& L_copy_bytes, Label& L_copy_8_bytes) {
|
||||||
DEBUG_ONLY(__ stop("enter at entry label, not here"));
|
DEBUG_ONLY(__ stop("enter at entry label, not here"));
|
||||||
Label L_loop;
|
Label L_loop;
|
||||||
__ align(OptoLoopAlignment);
|
__ align(OptoLoopAlignment);
|
||||||
__ BIND(L_loop);
|
if (UseUnalignedLoadStores) {
|
||||||
if(UseUnalignedLoadStores) {
|
Label L_end;
|
||||||
__ movdqu(xmm0, Address(end_from, qword_count, Address::times_8, -24));
|
// Copy 64-bytes per iteration
|
||||||
__ movdqu(Address(end_to, qword_count, Address::times_8, -24), xmm0);
|
__ BIND(L_loop);
|
||||||
__ movdqu(xmm1, Address(end_from, qword_count, Address::times_8, - 8));
|
if (UseAVX >= 2) {
|
||||||
__ movdqu(Address(end_to, qword_count, Address::times_8, - 8), xmm1);
|
__ vmovdqu(xmm0, Address(end_from, qword_count, Address::times_8, -56));
|
||||||
|
__ vmovdqu(Address(end_to, qword_count, Address::times_8, -56), xmm0);
|
||||||
|
__ vmovdqu(xmm1, Address(end_from, qword_count, Address::times_8, -24));
|
||||||
|
__ vmovdqu(Address(end_to, qword_count, Address::times_8, -24), xmm1);
|
||||||
|
} else {
|
||||||
|
__ movdqu(xmm0, Address(end_from, qword_count, Address::times_8, -56));
|
||||||
|
__ movdqu(Address(end_to, qword_count, Address::times_8, -56), xmm0);
|
||||||
|
__ movdqu(xmm1, Address(end_from, qword_count, Address::times_8, -40));
|
||||||
|
__ movdqu(Address(end_to, qword_count, Address::times_8, -40), xmm1);
|
||||||
|
__ movdqu(xmm2, Address(end_from, qword_count, Address::times_8, -24));
|
||||||
|
__ movdqu(Address(end_to, qword_count, Address::times_8, -24), xmm2);
|
||||||
|
__ movdqu(xmm3, Address(end_from, qword_count, Address::times_8, - 8));
|
||||||
|
__ movdqu(Address(end_to, qword_count, Address::times_8, - 8), xmm3);
|
||||||
|
}
|
||||||
|
__ BIND(L_copy_bytes);
|
||||||
|
__ addptr(qword_count, 8);
|
||||||
|
__ jcc(Assembler::lessEqual, L_loop);
|
||||||
|
__ subptr(qword_count, 4); // sub(8) and add(4)
|
||||||
|
__ jccb(Assembler::greater, L_end);
|
||||||
|
// Copy trailing 32 bytes
|
||||||
|
if (UseAVX >= 2) {
|
||||||
|
__ vmovdqu(xmm0, Address(end_from, qword_count, Address::times_8, -24));
|
||||||
|
__ vmovdqu(Address(end_to, qword_count, Address::times_8, -24), xmm0);
|
||||||
|
} else {
|
||||||
|
__ movdqu(xmm0, Address(end_from, qword_count, Address::times_8, -24));
|
||||||
|
__ movdqu(Address(end_to, qword_count, Address::times_8, -24), xmm0);
|
||||||
|
__ movdqu(xmm1, Address(end_from, qword_count, Address::times_8, - 8));
|
||||||
|
__ movdqu(Address(end_to, qword_count, Address::times_8, - 8), xmm1);
|
||||||
|
}
|
||||||
|
__ addptr(qword_count, 4);
|
||||||
|
__ BIND(L_end);
|
||||||
} else {
|
} else {
|
||||||
|
// Copy 32-bytes per iteration
|
||||||
|
__ BIND(L_loop);
|
||||||
__ movq(to, Address(end_from, qword_count, Address::times_8, -24));
|
__ movq(to, Address(end_from, qword_count, Address::times_8, -24));
|
||||||
__ movq(Address(end_to, qword_count, Address::times_8, -24), to);
|
__ movq(Address(end_to, qword_count, Address::times_8, -24), to);
|
||||||
__ movq(to, Address(end_from, qword_count, Address::times_8, -16));
|
__ movq(to, Address(end_from, qword_count, Address::times_8, -16));
|
||||||
|
@ -1311,15 +1342,15 @@ class StubGenerator: public StubCodeGenerator {
|
||||||
__ movq(Address(end_to, qword_count, Address::times_8, - 8), to);
|
__ movq(Address(end_to, qword_count, Address::times_8, - 8), to);
|
||||||
__ movq(to, Address(end_from, qword_count, Address::times_8, - 0));
|
__ movq(to, Address(end_from, qword_count, Address::times_8, - 0));
|
||||||
__ movq(Address(end_to, qword_count, Address::times_8, - 0), to);
|
__ movq(Address(end_to, qword_count, Address::times_8, - 0), to);
|
||||||
|
|
||||||
|
__ BIND(L_copy_bytes);
|
||||||
|
__ addptr(qword_count, 4);
|
||||||
|
__ jcc(Assembler::lessEqual, L_loop);
|
||||||
}
|
}
|
||||||
__ BIND(L_copy_32_bytes);
|
|
||||||
__ addptr(qword_count, 4);
|
|
||||||
__ jcc(Assembler::lessEqual, L_loop);
|
|
||||||
__ subptr(qword_count, 4);
|
__ subptr(qword_count, 4);
|
||||||
__ jcc(Assembler::less, L_copy_8_bytes); // Copy trailing qwords
|
__ jcc(Assembler::less, L_copy_8_bytes); // Copy trailing qwords
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Copy big chunks backward
|
// Copy big chunks backward
|
||||||
//
|
//
|
||||||
// Inputs:
|
// Inputs:
|
||||||
|
@ -1327,23 +1358,55 @@ class StubGenerator: public StubCodeGenerator {
|
||||||
// dest - destination array address
|
// dest - destination array address
|
||||||
// qword_count - 64-bits element count
|
// qword_count - 64-bits element count
|
||||||
// to - scratch
|
// to - scratch
|
||||||
// L_copy_32_bytes - entry label
|
// L_copy_bytes - entry label
|
||||||
// L_copy_8_bytes - exit label
|
// L_copy_8_bytes - exit label
|
||||||
//
|
//
|
||||||
void copy_32_bytes_backward(Register from, Register dest,
|
void copy_bytes_backward(Register from, Register dest,
|
||||||
Register qword_count, Register to,
|
Register qword_count, Register to,
|
||||||
Label& L_copy_32_bytes, Label& L_copy_8_bytes) {
|
Label& L_copy_bytes, Label& L_copy_8_bytes) {
|
||||||
DEBUG_ONLY(__ stop("enter at entry label, not here"));
|
DEBUG_ONLY(__ stop("enter at entry label, not here"));
|
||||||
Label L_loop;
|
Label L_loop;
|
||||||
__ align(OptoLoopAlignment);
|
__ align(OptoLoopAlignment);
|
||||||
__ BIND(L_loop);
|
if (UseUnalignedLoadStores) {
|
||||||
if(UseUnalignedLoadStores) {
|
Label L_end;
|
||||||
__ movdqu(xmm0, Address(from, qword_count, Address::times_8, 16));
|
// Copy 64-bytes per iteration
|
||||||
__ movdqu(Address(dest, qword_count, Address::times_8, 16), xmm0);
|
__ BIND(L_loop);
|
||||||
__ movdqu(xmm1, Address(from, qword_count, Address::times_8, 0));
|
if (UseAVX >= 2) {
|
||||||
__ movdqu(Address(dest, qword_count, Address::times_8, 0), xmm1);
|
__ vmovdqu(xmm0, Address(from, qword_count, Address::times_8, 32));
|
||||||
|
__ vmovdqu(Address(dest, qword_count, Address::times_8, 32), xmm0);
|
||||||
|
__ vmovdqu(xmm1, Address(from, qword_count, Address::times_8, 0));
|
||||||
|
__ vmovdqu(Address(dest, qword_count, Address::times_8, 0), xmm1);
|
||||||
|
} else {
|
||||||
|
__ movdqu(xmm0, Address(from, qword_count, Address::times_8, 48));
|
||||||
|
__ movdqu(Address(dest, qword_count, Address::times_8, 48), xmm0);
|
||||||
|
__ movdqu(xmm1, Address(from, qword_count, Address::times_8, 32));
|
||||||
|
__ movdqu(Address(dest, qword_count, Address::times_8, 32), xmm1);
|
||||||
|
__ movdqu(xmm2, Address(from, qword_count, Address::times_8, 16));
|
||||||
|
__ movdqu(Address(dest, qword_count, Address::times_8, 16), xmm2);
|
||||||
|
__ movdqu(xmm3, Address(from, qword_count, Address::times_8, 0));
|
||||||
|
__ movdqu(Address(dest, qword_count, Address::times_8, 0), xmm3);
|
||||||
|
}
|
||||||
|
__ BIND(L_copy_bytes);
|
||||||
|
__ subptr(qword_count, 8);
|
||||||
|
__ jcc(Assembler::greaterEqual, L_loop);
|
||||||
|
|
||||||
|
__ addptr(qword_count, 4); // add(8) and sub(4)
|
||||||
|
__ jccb(Assembler::less, L_end);
|
||||||
|
// Copy trailing 32 bytes
|
||||||
|
if (UseAVX >= 2) {
|
||||||
|
__ vmovdqu(xmm0, Address(from, qword_count, Address::times_8, 0));
|
||||||
|
__ vmovdqu(Address(dest, qword_count, Address::times_8, 0), xmm0);
|
||||||
|
} else {
|
||||||
|
__ movdqu(xmm0, Address(from, qword_count, Address::times_8, 16));
|
||||||
|
__ movdqu(Address(dest, qword_count, Address::times_8, 16), xmm0);
|
||||||
|
__ movdqu(xmm1, Address(from, qword_count, Address::times_8, 0));
|
||||||
|
__ movdqu(Address(dest, qword_count, Address::times_8, 0), xmm1);
|
||||||
|
}
|
||||||
|
__ subptr(qword_count, 4);
|
||||||
|
__ BIND(L_end);
|
||||||
} else {
|
} else {
|
||||||
|
// Copy 32-bytes per iteration
|
||||||
|
__ BIND(L_loop);
|
||||||
__ movq(to, Address(from, qword_count, Address::times_8, 24));
|
__ movq(to, Address(from, qword_count, Address::times_8, 24));
|
||||||
__ movq(Address(dest, qword_count, Address::times_8, 24), to);
|
__ movq(Address(dest, qword_count, Address::times_8, 24), to);
|
||||||
__ movq(to, Address(from, qword_count, Address::times_8, 16));
|
__ movq(to, Address(from, qword_count, Address::times_8, 16));
|
||||||
|
@ -1352,10 +1415,11 @@ class StubGenerator: public StubCodeGenerator {
|
||||||
__ movq(Address(dest, qword_count, Address::times_8, 8), to);
|
__ movq(Address(dest, qword_count, Address::times_8, 8), to);
|
||||||
__ movq(to, Address(from, qword_count, Address::times_8, 0));
|
__ movq(to, Address(from, qword_count, Address::times_8, 0));
|
||||||
__ movq(Address(dest, qword_count, Address::times_8, 0), to);
|
__ movq(Address(dest, qword_count, Address::times_8, 0), to);
|
||||||
|
|
||||||
|
__ BIND(L_copy_bytes);
|
||||||
|
__ subptr(qword_count, 4);
|
||||||
|
__ jcc(Assembler::greaterEqual, L_loop);
|
||||||
}
|
}
|
||||||
__ BIND(L_copy_32_bytes);
|
|
||||||
__ subptr(qword_count, 4);
|
|
||||||
__ jcc(Assembler::greaterEqual, L_loop);
|
|
||||||
__ addptr(qword_count, 4);
|
__ addptr(qword_count, 4);
|
||||||
__ jcc(Assembler::greater, L_copy_8_bytes); // Copy trailing qwords
|
__ jcc(Assembler::greater, L_copy_8_bytes); // Copy trailing qwords
|
||||||
}
|
}
|
||||||
|
@ -1385,7 +1449,7 @@ class StubGenerator: public StubCodeGenerator {
|
||||||
StubCodeMark mark(this, "StubRoutines", name);
|
StubCodeMark mark(this, "StubRoutines", name);
|
||||||
address start = __ pc();
|
address start = __ pc();
|
||||||
|
|
||||||
Label L_copy_32_bytes, L_copy_8_bytes, L_copy_4_bytes, L_copy_2_bytes;
|
Label L_copy_bytes, L_copy_8_bytes, L_copy_4_bytes, L_copy_2_bytes;
|
||||||
Label L_copy_byte, L_exit;
|
Label L_copy_byte, L_exit;
|
||||||
const Register from = rdi; // source array address
|
const Register from = rdi; // source array address
|
||||||
const Register to = rsi; // destination array address
|
const Register to = rsi; // destination array address
|
||||||
|
@ -1417,7 +1481,7 @@ class StubGenerator: public StubCodeGenerator {
|
||||||
__ lea(end_from, Address(from, qword_count, Address::times_8, -8));
|
__ lea(end_from, Address(from, qword_count, Address::times_8, -8));
|
||||||
__ lea(end_to, Address(to, qword_count, Address::times_8, -8));
|
__ lea(end_to, Address(to, qword_count, Address::times_8, -8));
|
||||||
__ negptr(qword_count); // make the count negative
|
__ negptr(qword_count); // make the count negative
|
||||||
__ jmp(L_copy_32_bytes);
|
__ jmp(L_copy_bytes);
|
||||||
|
|
||||||
// Copy trailing qwords
|
// Copy trailing qwords
|
||||||
__ BIND(L_copy_8_bytes);
|
__ BIND(L_copy_8_bytes);
|
||||||
|
@ -1460,8 +1524,8 @@ class StubGenerator: public StubCodeGenerator {
|
||||||
__ leave(); // required for proper stackwalking of RuntimeStub frame
|
__ leave(); // required for proper stackwalking of RuntimeStub frame
|
||||||
__ ret(0);
|
__ ret(0);
|
||||||
|
|
||||||
// Copy in 32-bytes chunks
|
// Copy in multi-bytes chunks
|
||||||
copy_32_bytes_forward(end_from, end_to, qword_count, rax, L_copy_32_bytes, L_copy_8_bytes);
|
copy_bytes_forward(end_from, end_to, qword_count, rax, L_copy_bytes, L_copy_8_bytes);
|
||||||
__ jmp(L_copy_4_bytes);
|
__ jmp(L_copy_4_bytes);
|
||||||
|
|
||||||
return start;
|
return start;
|
||||||
|
@ -1488,7 +1552,7 @@ class StubGenerator: public StubCodeGenerator {
|
||||||
StubCodeMark mark(this, "StubRoutines", name);
|
StubCodeMark mark(this, "StubRoutines", name);
|
||||||
address start = __ pc();
|
address start = __ pc();
|
||||||
|
|
||||||
Label L_copy_32_bytes, L_copy_8_bytes, L_copy_4_bytes, L_copy_2_bytes;
|
Label L_copy_bytes, L_copy_8_bytes, L_copy_4_bytes, L_copy_2_bytes;
|
||||||
const Register from = rdi; // source array address
|
const Register from = rdi; // source array address
|
||||||
const Register to = rsi; // destination array address
|
const Register to = rsi; // destination array address
|
||||||
const Register count = rdx; // elements count
|
const Register count = rdx; // elements count
|
||||||
|
@ -1531,10 +1595,10 @@ class StubGenerator: public StubCodeGenerator {
|
||||||
// Check for and copy trailing dword
|
// Check for and copy trailing dword
|
||||||
__ BIND(L_copy_4_bytes);
|
__ BIND(L_copy_4_bytes);
|
||||||
__ testl(byte_count, 4);
|
__ testl(byte_count, 4);
|
||||||
__ jcc(Assembler::zero, L_copy_32_bytes);
|
__ jcc(Assembler::zero, L_copy_bytes);
|
||||||
__ movl(rax, Address(from, qword_count, Address::times_8));
|
__ movl(rax, Address(from, qword_count, Address::times_8));
|
||||||
__ movl(Address(to, qword_count, Address::times_8), rax);
|
__ movl(Address(to, qword_count, Address::times_8), rax);
|
||||||
__ jmp(L_copy_32_bytes);
|
__ jmp(L_copy_bytes);
|
||||||
|
|
||||||
// Copy trailing qwords
|
// Copy trailing qwords
|
||||||
__ BIND(L_copy_8_bytes);
|
__ BIND(L_copy_8_bytes);
|
||||||
|
@ -1549,8 +1613,8 @@ class StubGenerator: public StubCodeGenerator {
|
||||||
__ leave(); // required for proper stackwalking of RuntimeStub frame
|
__ leave(); // required for proper stackwalking of RuntimeStub frame
|
||||||
__ ret(0);
|
__ ret(0);
|
||||||
|
|
||||||
// Copy in 32-bytes chunks
|
// Copy in multi-bytes chunks
|
||||||
copy_32_bytes_backward(from, to, qword_count, rax, L_copy_32_bytes, L_copy_8_bytes);
|
copy_bytes_backward(from, to, qword_count, rax, L_copy_bytes, L_copy_8_bytes);
|
||||||
|
|
||||||
restore_arg_regs();
|
restore_arg_regs();
|
||||||
inc_counter_np(SharedRuntime::_jbyte_array_copy_ctr); // Update counter after rscratch1 is free
|
inc_counter_np(SharedRuntime::_jbyte_array_copy_ctr); // Update counter after rscratch1 is free
|
||||||
|
@ -1585,7 +1649,7 @@ class StubGenerator: public StubCodeGenerator {
|
||||||
StubCodeMark mark(this, "StubRoutines", name);
|
StubCodeMark mark(this, "StubRoutines", name);
|
||||||
address start = __ pc();
|
address start = __ pc();
|
||||||
|
|
||||||
Label L_copy_32_bytes, L_copy_8_bytes, L_copy_4_bytes,L_copy_2_bytes,L_exit;
|
Label L_copy_bytes, L_copy_8_bytes, L_copy_4_bytes,L_copy_2_bytes,L_exit;
|
||||||
const Register from = rdi; // source array address
|
const Register from = rdi; // source array address
|
||||||
const Register to = rsi; // destination array address
|
const Register to = rsi; // destination array address
|
||||||
const Register count = rdx; // elements count
|
const Register count = rdx; // elements count
|
||||||
|
@ -1616,7 +1680,7 @@ class StubGenerator: public StubCodeGenerator {
|
||||||
__ lea(end_from, Address(from, qword_count, Address::times_8, -8));
|
__ lea(end_from, Address(from, qword_count, Address::times_8, -8));
|
||||||
__ lea(end_to, Address(to, qword_count, Address::times_8, -8));
|
__ lea(end_to, Address(to, qword_count, Address::times_8, -8));
|
||||||
__ negptr(qword_count);
|
__ negptr(qword_count);
|
||||||
__ jmp(L_copy_32_bytes);
|
__ jmp(L_copy_bytes);
|
||||||
|
|
||||||
// Copy trailing qwords
|
// Copy trailing qwords
|
||||||
__ BIND(L_copy_8_bytes);
|
__ BIND(L_copy_8_bytes);
|
||||||
|
@ -1652,8 +1716,8 @@ class StubGenerator: public StubCodeGenerator {
|
||||||
__ leave(); // required for proper stackwalking of RuntimeStub frame
|
__ leave(); // required for proper stackwalking of RuntimeStub frame
|
||||||
__ ret(0);
|
__ ret(0);
|
||||||
|
|
||||||
// Copy in 32-bytes chunks
|
// Copy in multi-bytes chunks
|
||||||
copy_32_bytes_forward(end_from, end_to, qword_count, rax, L_copy_32_bytes, L_copy_8_bytes);
|
copy_bytes_forward(end_from, end_to, qword_count, rax, L_copy_bytes, L_copy_8_bytes);
|
||||||
__ jmp(L_copy_4_bytes);
|
__ jmp(L_copy_4_bytes);
|
||||||
|
|
||||||
return start;
|
return start;
|
||||||
|
@ -1700,7 +1764,7 @@ class StubGenerator: public StubCodeGenerator {
|
||||||
StubCodeMark mark(this, "StubRoutines", name);
|
StubCodeMark mark(this, "StubRoutines", name);
|
||||||
address start = __ pc();
|
address start = __ pc();
|
||||||
|
|
||||||
Label L_copy_32_bytes, L_copy_8_bytes, L_copy_4_bytes;
|
Label L_copy_bytes, L_copy_8_bytes, L_copy_4_bytes;
|
||||||
const Register from = rdi; // source array address
|
const Register from = rdi; // source array address
|
||||||
const Register to = rsi; // destination array address
|
const Register to = rsi; // destination array address
|
||||||
const Register count = rdx; // elements count
|
const Register count = rdx; // elements count
|
||||||
|
@ -1735,10 +1799,10 @@ class StubGenerator: public StubCodeGenerator {
|
||||||
// Check for and copy trailing dword
|
// Check for and copy trailing dword
|
||||||
__ BIND(L_copy_4_bytes);
|
__ BIND(L_copy_4_bytes);
|
||||||
__ testl(word_count, 2);
|
__ testl(word_count, 2);
|
||||||
__ jcc(Assembler::zero, L_copy_32_bytes);
|
__ jcc(Assembler::zero, L_copy_bytes);
|
||||||
__ movl(rax, Address(from, qword_count, Address::times_8));
|
__ movl(rax, Address(from, qword_count, Address::times_8));
|
||||||
__ movl(Address(to, qword_count, Address::times_8), rax);
|
__ movl(Address(to, qword_count, Address::times_8), rax);
|
||||||
__ jmp(L_copy_32_bytes);
|
__ jmp(L_copy_bytes);
|
||||||
|
|
||||||
// Copy trailing qwords
|
// Copy trailing qwords
|
||||||
__ BIND(L_copy_8_bytes);
|
__ BIND(L_copy_8_bytes);
|
||||||
|
@ -1753,8 +1817,8 @@ class StubGenerator: public StubCodeGenerator {
|
||||||
__ leave(); // required for proper stackwalking of RuntimeStub frame
|
__ leave(); // required for proper stackwalking of RuntimeStub frame
|
||||||
__ ret(0);
|
__ ret(0);
|
||||||
|
|
||||||
// Copy in 32-bytes chunks
|
// Copy in multi-bytes chunks
|
||||||
copy_32_bytes_backward(from, to, qword_count, rax, L_copy_32_bytes, L_copy_8_bytes);
|
copy_bytes_backward(from, to, qword_count, rax, L_copy_bytes, L_copy_8_bytes);
|
||||||
|
|
||||||
restore_arg_regs();
|
restore_arg_regs();
|
||||||
inc_counter_np(SharedRuntime::_jshort_array_copy_ctr); // Update counter after rscratch1 is free
|
inc_counter_np(SharedRuntime::_jshort_array_copy_ctr); // Update counter after rscratch1 is free
|
||||||
|
@ -1790,7 +1854,7 @@ class StubGenerator: public StubCodeGenerator {
|
||||||
StubCodeMark mark(this, "StubRoutines", name);
|
StubCodeMark mark(this, "StubRoutines", name);
|
||||||
address start = __ pc();
|
address start = __ pc();
|
||||||
|
|
||||||
Label L_copy_32_bytes, L_copy_8_bytes, L_copy_4_bytes, L_exit;
|
Label L_copy_bytes, L_copy_8_bytes, L_copy_4_bytes, L_exit;
|
||||||
const Register from = rdi; // source array address
|
const Register from = rdi; // source array address
|
||||||
const Register to = rsi; // destination array address
|
const Register to = rsi; // destination array address
|
||||||
const Register count = rdx; // elements count
|
const Register count = rdx; // elements count
|
||||||
|
@ -1826,7 +1890,7 @@ class StubGenerator: public StubCodeGenerator {
|
||||||
__ lea(end_from, Address(from, qword_count, Address::times_8, -8));
|
__ lea(end_from, Address(from, qword_count, Address::times_8, -8));
|
||||||
__ lea(end_to, Address(to, qword_count, Address::times_8, -8));
|
__ lea(end_to, Address(to, qword_count, Address::times_8, -8));
|
||||||
__ negptr(qword_count);
|
__ negptr(qword_count);
|
||||||
__ jmp(L_copy_32_bytes);
|
__ jmp(L_copy_bytes);
|
||||||
|
|
||||||
// Copy trailing qwords
|
// Copy trailing qwords
|
||||||
__ BIND(L_copy_8_bytes);
|
__ BIND(L_copy_8_bytes);
|
||||||
|
@ -1853,8 +1917,8 @@ class StubGenerator: public StubCodeGenerator {
|
||||||
__ leave(); // required for proper stackwalking of RuntimeStub frame
|
__ leave(); // required for proper stackwalking of RuntimeStub frame
|
||||||
__ ret(0);
|
__ ret(0);
|
||||||
|
|
||||||
// Copy 32-bytes chunks
|
// Copy in multi-bytes chunks
|
||||||
copy_32_bytes_forward(end_from, end_to, qword_count, rax, L_copy_32_bytes, L_copy_8_bytes);
|
copy_bytes_forward(end_from, end_to, qword_count, rax, L_copy_bytes, L_copy_8_bytes);
|
||||||
__ jmp(L_copy_4_bytes);
|
__ jmp(L_copy_4_bytes);
|
||||||
|
|
||||||
return start;
|
return start;
|
||||||
|
@ -1882,7 +1946,7 @@ class StubGenerator: public StubCodeGenerator {
|
||||||
StubCodeMark mark(this, "StubRoutines", name);
|
StubCodeMark mark(this, "StubRoutines", name);
|
||||||
address start = __ pc();
|
address start = __ pc();
|
||||||
|
|
||||||
Label L_copy_32_bytes, L_copy_8_bytes, L_copy_2_bytes, L_exit;
|
Label L_copy_bytes, L_copy_8_bytes, L_copy_2_bytes, L_exit;
|
||||||
const Register from = rdi; // source array address
|
const Register from = rdi; // source array address
|
||||||
const Register to = rsi; // destination array address
|
const Register to = rsi; // destination array address
|
||||||
const Register count = rdx; // elements count
|
const Register count = rdx; // elements count
|
||||||
|
@ -1916,10 +1980,10 @@ class StubGenerator: public StubCodeGenerator {
|
||||||
|
|
||||||
// Check for and copy trailing dword
|
// Check for and copy trailing dword
|
||||||
__ testl(dword_count, 1);
|
__ testl(dword_count, 1);
|
||||||
__ jcc(Assembler::zero, L_copy_32_bytes);
|
__ jcc(Assembler::zero, L_copy_bytes);
|
||||||
__ movl(rax, Address(from, dword_count, Address::times_4, -4));
|
__ movl(rax, Address(from, dword_count, Address::times_4, -4));
|
||||||
__ movl(Address(to, dword_count, Address::times_4, -4), rax);
|
__ movl(Address(to, dword_count, Address::times_4, -4), rax);
|
||||||
__ jmp(L_copy_32_bytes);
|
__ jmp(L_copy_bytes);
|
||||||
|
|
||||||
// Copy trailing qwords
|
// Copy trailing qwords
|
||||||
__ BIND(L_copy_8_bytes);
|
__ BIND(L_copy_8_bytes);
|
||||||
|
@ -1937,8 +2001,8 @@ class StubGenerator: public StubCodeGenerator {
|
||||||
__ leave(); // required for proper stackwalking of RuntimeStub frame
|
__ leave(); // required for proper stackwalking of RuntimeStub frame
|
||||||
__ ret(0);
|
__ ret(0);
|
||||||
|
|
||||||
// Copy in 32-bytes chunks
|
// Copy in multi-bytes chunks
|
||||||
copy_32_bytes_backward(from, to, qword_count, rax, L_copy_32_bytes, L_copy_8_bytes);
|
copy_bytes_backward(from, to, qword_count, rax, L_copy_bytes, L_copy_8_bytes);
|
||||||
|
|
||||||
__ bind(L_exit);
|
__ bind(L_exit);
|
||||||
if (is_oop) {
|
if (is_oop) {
|
||||||
|
@ -1976,7 +2040,7 @@ class StubGenerator: public StubCodeGenerator {
|
||||||
StubCodeMark mark(this, "StubRoutines", name);
|
StubCodeMark mark(this, "StubRoutines", name);
|
||||||
address start = __ pc();
|
address start = __ pc();
|
||||||
|
|
||||||
Label L_copy_32_bytes, L_copy_8_bytes, L_exit;
|
Label L_copy_bytes, L_copy_8_bytes, L_exit;
|
||||||
const Register from = rdi; // source array address
|
const Register from = rdi; // source array address
|
||||||
const Register to = rsi; // destination array address
|
const Register to = rsi; // destination array address
|
||||||
const Register qword_count = rdx; // elements count
|
const Register qword_count = rdx; // elements count
|
||||||
|
@ -2008,7 +2072,7 @@ class StubGenerator: public StubCodeGenerator {
|
||||||
__ lea(end_from, Address(from, qword_count, Address::times_8, -8));
|
__ lea(end_from, Address(from, qword_count, Address::times_8, -8));
|
||||||
__ lea(end_to, Address(to, qword_count, Address::times_8, -8));
|
__ lea(end_to, Address(to, qword_count, Address::times_8, -8));
|
||||||
__ negptr(qword_count);
|
__ negptr(qword_count);
|
||||||
__ jmp(L_copy_32_bytes);
|
__ jmp(L_copy_bytes);
|
||||||
|
|
||||||
// Copy trailing qwords
|
// Copy trailing qwords
|
||||||
__ BIND(L_copy_8_bytes);
|
__ BIND(L_copy_8_bytes);
|
||||||
|
@ -2027,8 +2091,8 @@ class StubGenerator: public StubCodeGenerator {
|
||||||
__ ret(0);
|
__ ret(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy 64-byte chunks
|
// Copy in multi-bytes chunks
|
||||||
copy_32_bytes_forward(end_from, end_to, qword_count, rax, L_copy_32_bytes, L_copy_8_bytes);
|
copy_bytes_forward(end_from, end_to, qword_count, rax, L_copy_bytes, L_copy_8_bytes);
|
||||||
|
|
||||||
if (is_oop) {
|
if (is_oop) {
|
||||||
__ BIND(L_exit);
|
__ BIND(L_exit);
|
||||||
|
@ -2065,7 +2129,7 @@ class StubGenerator: public StubCodeGenerator {
|
||||||
StubCodeMark mark(this, "StubRoutines", name);
|
StubCodeMark mark(this, "StubRoutines", name);
|
||||||
address start = __ pc();
|
address start = __ pc();
|
||||||
|
|
||||||
Label L_copy_32_bytes, L_copy_8_bytes, L_exit;
|
Label L_copy_bytes, L_copy_8_bytes, L_exit;
|
||||||
const Register from = rdi; // source array address
|
const Register from = rdi; // source array address
|
||||||
const Register to = rsi; // destination array address
|
const Register to = rsi; // destination array address
|
||||||
const Register qword_count = rdx; // elements count
|
const Register qword_count = rdx; // elements count
|
||||||
|
@ -2091,7 +2155,7 @@ class StubGenerator: public StubCodeGenerator {
|
||||||
gen_write_ref_array_pre_barrier(to, saved_count, dest_uninitialized);
|
gen_write_ref_array_pre_barrier(to, saved_count, dest_uninitialized);
|
||||||
}
|
}
|
||||||
|
|
||||||
__ jmp(L_copy_32_bytes);
|
__ jmp(L_copy_bytes);
|
||||||
|
|
||||||
// Copy trailing qwords
|
// Copy trailing qwords
|
||||||
__ BIND(L_copy_8_bytes);
|
__ BIND(L_copy_8_bytes);
|
||||||
|
@ -2110,8 +2174,8 @@ class StubGenerator: public StubCodeGenerator {
|
||||||
__ ret(0);
|
__ ret(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy in 32-bytes chunks
|
// Copy in multi-bytes chunks
|
||||||
copy_32_bytes_backward(from, to, qword_count, rax, L_copy_32_bytes, L_copy_8_bytes);
|
copy_bytes_backward(from, to, qword_count, rax, L_copy_bytes, L_copy_8_bytes);
|
||||||
|
|
||||||
if (is_oop) {
|
if (is_oop) {
|
||||||
__ BIND(L_exit);
|
__ BIND(L_exit);
|
||||||
|
|
|
@ -429,7 +429,7 @@ void VM_Version::get_processor_features() {
|
||||||
}
|
}
|
||||||
|
|
||||||
char buf[256];
|
char buf[256];
|
||||||
jio_snprintf(buf, sizeof(buf), "(%u cores per cpu, %u threads per core) family %d model %d stepping %d%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s",
|
jio_snprintf(buf, sizeof(buf), "(%u cores per cpu, %u threads per core) family %d model %d stepping %d%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s",
|
||||||
cores_per_cpu(), threads_per_core(),
|
cores_per_cpu(), threads_per_core(),
|
||||||
cpu_family(), _model, _stepping,
|
cpu_family(), _model, _stepping,
|
||||||
(supports_cmov() ? ", cmov" : ""),
|
(supports_cmov() ? ", cmov" : ""),
|
||||||
|
@ -446,6 +446,7 @@ void VM_Version::get_processor_features() {
|
||||||
(supports_avx() ? ", avx" : ""),
|
(supports_avx() ? ", avx" : ""),
|
||||||
(supports_avx2() ? ", avx2" : ""),
|
(supports_avx2() ? ", avx2" : ""),
|
||||||
(supports_aes() ? ", aes" : ""),
|
(supports_aes() ? ", aes" : ""),
|
||||||
|
(supports_erms() ? ", erms" : ""),
|
||||||
(supports_mmx_ext() ? ", mmxext" : ""),
|
(supports_mmx_ext() ? ", mmxext" : ""),
|
||||||
(supports_3dnow_prefetch() ? ", 3dnowpref" : ""),
|
(supports_3dnow_prefetch() ? ", 3dnowpref" : ""),
|
||||||
(supports_lzcnt() ? ", lzcnt": ""),
|
(supports_lzcnt() ? ", lzcnt": ""),
|
||||||
|
@ -671,6 +672,16 @@ void VM_Version::get_processor_features() {
|
||||||
FLAG_SET_DEFAULT(UsePopCountInstruction, false);
|
FLAG_SET_DEFAULT(UsePopCountInstruction, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Use fast-string operations if available.
|
||||||
|
if (supports_erms()) {
|
||||||
|
if (FLAG_IS_DEFAULT(UseFastStosb)) {
|
||||||
|
UseFastStosb = true;
|
||||||
|
}
|
||||||
|
} else if (UseFastStosb) {
|
||||||
|
warning("fast-string operations are not available on this CPU");
|
||||||
|
FLAG_SET_DEFAULT(UseFastStosb, false);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef COMPILER2
|
#ifdef COMPILER2
|
||||||
if (FLAG_IS_DEFAULT(AlignVector)) {
|
if (FLAG_IS_DEFAULT(AlignVector)) {
|
||||||
// Modern processors allow misaligned memory operations for vectors.
|
// Modern processors allow misaligned memory operations for vectors.
|
||||||
|
|
|
@ -204,7 +204,8 @@ public:
|
||||||
avx2 : 1,
|
avx2 : 1,
|
||||||
: 2,
|
: 2,
|
||||||
bmi2 : 1,
|
bmi2 : 1,
|
||||||
: 23;
|
erms : 1,
|
||||||
|
: 22;
|
||||||
} bits;
|
} bits;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -247,7 +248,8 @@ protected:
|
||||||
CPU_TSCINV = (1 << 16),
|
CPU_TSCINV = (1 << 16),
|
||||||
CPU_AVX = (1 << 17),
|
CPU_AVX = (1 << 17),
|
||||||
CPU_AVX2 = (1 << 18),
|
CPU_AVX2 = (1 << 18),
|
||||||
CPU_AES = (1 << 19)
|
CPU_AES = (1 << 19),
|
||||||
|
CPU_ERMS = (1 << 20) // enhanced 'rep movsb/stosb' instructions
|
||||||
} cpuFeatureFlags;
|
} cpuFeatureFlags;
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
@ -425,6 +427,8 @@ protected:
|
||||||
result |= CPU_TSCINV;
|
result |= CPU_TSCINV;
|
||||||
if (_cpuid_info.std_cpuid1_ecx.bits.aes != 0)
|
if (_cpuid_info.std_cpuid1_ecx.bits.aes != 0)
|
||||||
result |= CPU_AES;
|
result |= CPU_AES;
|
||||||
|
if (_cpuid_info.sef_cpuid7_ebx.bits.erms != 0)
|
||||||
|
result |= CPU_ERMS;
|
||||||
|
|
||||||
// AMD features.
|
// AMD features.
|
||||||
if (is_amd()) {
|
if (is_amd()) {
|
||||||
|
@ -489,7 +493,7 @@ public:
|
||||||
return (_cpuid_info.std_max_function >= 0xB) &&
|
return (_cpuid_info.std_max_function >= 0xB) &&
|
||||||
// eax[4:0] | ebx[0:15] == 0 indicates invalid topology level.
|
// eax[4:0] | ebx[0:15] == 0 indicates invalid topology level.
|
||||||
// Some cpus have max cpuid >= 0xB but do not support processor topology.
|
// Some cpus have max cpuid >= 0xB but do not support processor topology.
|
||||||
((_cpuid_info.tpl_cpuidB0_eax & 0x1f | _cpuid_info.tpl_cpuidB0_ebx.bits.logical_cpus) != 0);
|
(((_cpuid_info.tpl_cpuidB0_eax & 0x1f) | _cpuid_info.tpl_cpuidB0_ebx.bits.logical_cpus) != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint cores_per_cpu() {
|
static uint cores_per_cpu() {
|
||||||
|
@ -550,6 +554,7 @@ public:
|
||||||
static bool supports_avx2() { return (_cpuFeatures & CPU_AVX2) != 0; }
|
static bool supports_avx2() { return (_cpuFeatures & CPU_AVX2) != 0; }
|
||||||
static bool supports_tsc() { return (_cpuFeatures & CPU_TSC) != 0; }
|
static bool supports_tsc() { return (_cpuFeatures & CPU_TSC) != 0; }
|
||||||
static bool supports_aes() { return (_cpuFeatures & CPU_AES) != 0; }
|
static bool supports_aes() { return (_cpuFeatures & CPU_AES) != 0; }
|
||||||
|
static bool supports_erms() { return (_cpuFeatures & CPU_ERMS) != 0; }
|
||||||
|
|
||||||
// Intel features
|
// Intel features
|
||||||
static bool is_intel_family_core() { return is_intel() &&
|
static bool is_intel_family_core() { return is_intel() &&
|
||||||
|
|
|
@ -11572,15 +11572,28 @@ instruct MoveL2D_reg_reg_sse(regD dst, eRegL src, regD tmp) %{
|
||||||
// =======================================================================
|
// =======================================================================
|
||||||
// fast clearing of an array
|
// fast clearing of an array
|
||||||
instruct rep_stos(eCXRegI cnt, eDIRegP base, eAXRegI zero, Universe dummy, eFlagsReg cr) %{
|
instruct rep_stos(eCXRegI cnt, eDIRegP base, eAXRegI zero, Universe dummy, eFlagsReg cr) %{
|
||||||
|
predicate(!UseFastStosb);
|
||||||
match(Set dummy (ClearArray cnt base));
|
match(Set dummy (ClearArray cnt base));
|
||||||
effect(USE_KILL cnt, USE_KILL base, KILL zero, KILL cr);
|
effect(USE_KILL cnt, USE_KILL base, KILL zero, KILL cr);
|
||||||
format %{ "SHL ECX,1\t# Convert doublewords to words\n\t"
|
format %{ "XOR EAX,EAX\t# ClearArray:\n\t"
|
||||||
"XOR EAX,EAX\n\t"
|
"SHL ECX,1\t# Convert doublewords to words\n\t"
|
||||||
"REP STOS\t# store EAX into [EDI++] while ECX--" %}
|
"REP STOS\t# store EAX into [EDI++] while ECX--" %}
|
||||||
opcode(0,0x4);
|
ins_encode %{
|
||||||
ins_encode( Opcode(0xD1), RegOpc(ECX),
|
__ clear_mem($base$$Register, $cnt$$Register, $zero$$Register);
|
||||||
OpcRegReg(0x33,EAX,EAX),
|
%}
|
||||||
Opcode(0xF3), Opcode(0xAB) );
|
ins_pipe( pipe_slow );
|
||||||
|
%}
|
||||||
|
|
||||||
|
instruct rep_fast_stosb(eCXRegI cnt, eDIRegP base, eAXRegI zero, Universe dummy, eFlagsReg cr) %{
|
||||||
|
predicate(UseFastStosb);
|
||||||
|
match(Set dummy (ClearArray cnt base));
|
||||||
|
effect(USE_KILL cnt, USE_KILL base, KILL zero, KILL cr);
|
||||||
|
format %{ "XOR EAX,EAX\t# ClearArray:\n\t"
|
||||||
|
"SHL ECX,3\t# Convert doublewords to bytes\n\t"
|
||||||
|
"REP STOSB\t# store EAX into [EDI++] while ECX--" %}
|
||||||
|
ins_encode %{
|
||||||
|
__ clear_mem($base$$Register, $cnt$$Register, $zero$$Register);
|
||||||
|
%}
|
||||||
ins_pipe( pipe_slow );
|
ins_pipe( pipe_slow );
|
||||||
%}
|
%}
|
||||||
|
|
||||||
|
|
|
@ -10374,16 +10374,33 @@ instruct MoveL2D_reg_reg(regD dst, rRegL src) %{
|
||||||
instruct rep_stos(rcx_RegL cnt, rdi_RegP base, rax_RegI zero, Universe dummy,
|
instruct rep_stos(rcx_RegL cnt, rdi_RegP base, rax_RegI zero, Universe dummy,
|
||||||
rFlagsReg cr)
|
rFlagsReg cr)
|
||||||
%{
|
%{
|
||||||
|
predicate(!UseFastStosb);
|
||||||
match(Set dummy (ClearArray cnt base));
|
match(Set dummy (ClearArray cnt base));
|
||||||
effect(USE_KILL cnt, USE_KILL base, KILL zero, KILL cr);
|
effect(USE_KILL cnt, USE_KILL base, KILL zero, KILL cr);
|
||||||
|
|
||||||
format %{ "xorl rax, rax\t# ClearArray:\n\t"
|
format %{ "xorq rax, rax\t# ClearArray:\n\t"
|
||||||
"rep stosq\t# Store rax to *rdi++ while rcx--" %}
|
"rep stosq\t# Store rax to *rdi++ while rcx--" %}
|
||||||
ins_encode(opc_reg_reg(0x33, RAX, RAX), // xorl %eax, %eax
|
ins_encode %{
|
||||||
Opcode(0xF3), Opcode(0x48), Opcode(0xAB)); // rep REX_W stos
|
__ clear_mem($base$$Register, $cnt$$Register, $zero$$Register);
|
||||||
|
%}
|
||||||
ins_pipe(pipe_slow);
|
ins_pipe(pipe_slow);
|
||||||
%}
|
%}
|
||||||
|
|
||||||
|
instruct rep_fast_stosb(rcx_RegL cnt, rdi_RegP base, rax_RegI zero, Universe dummy,
|
||||||
|
rFlagsReg cr)
|
||||||
|
%{
|
||||||
|
predicate(UseFastStosb);
|
||||||
|
match(Set dummy (ClearArray cnt base));
|
||||||
|
effect(USE_KILL cnt, USE_KILL base, KILL zero, KILL cr);
|
||||||
|
format %{ "xorq rax, rax\t# ClearArray:\n\t"
|
||||||
|
"shlq rcx,3\t# Convert doublewords to bytes\n\t"
|
||||||
|
"rep stosb\t# Store rax to *rdi++ while rcx--" %}
|
||||||
|
ins_encode %{
|
||||||
|
__ clear_mem($base$$Register, $cnt$$Register, $zero$$Register);
|
||||||
|
%}
|
||||||
|
ins_pipe( pipe_slow );
|
||||||
|
%}
|
||||||
|
|
||||||
instruct string_compare(rdi_RegP str1, rcx_RegI cnt1, rsi_RegP str2, rdx_RegI cnt2,
|
instruct string_compare(rdi_RegP str1, rcx_RegI cnt1, rsi_RegP str2, rdx_RegI cnt2,
|
||||||
rax_RegI result, regD tmp1, rFlagsReg cr)
|
rax_RegI result, regD tmp1, rFlagsReg cr)
|
||||||
%{
|
%{
|
||||||
|
|
|
@ -98,10 +98,20 @@ BasicObjectLock* frame::interpreter_frame_monitor_end() const {
|
||||||
#endif // CC_INTERP
|
#endif // CC_INTERP
|
||||||
|
|
||||||
void frame::patch_pc(Thread* thread, address pc) {
|
void frame::patch_pc(Thread* thread, address pc) {
|
||||||
// We borrow this call to set the thread pointer in the interpreter
|
|
||||||
// state; the hook to set up deoptimized frames isn't supplied it.
|
if (pc != NULL) {
|
||||||
assert(pc == NULL, "should be");
|
_cb = CodeCache::find_blob(pc);
|
||||||
get_interpreterState()->set_thread((JavaThread *) thread);
|
SharkFrame* sharkframe = zeroframe()->as_shark_frame();
|
||||||
|
sharkframe->set_pc(pc);
|
||||||
|
_pc = pc;
|
||||||
|
_deopt_state = is_deoptimized;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// We borrow this call to set the thread pointer in the interpreter
|
||||||
|
// state; the hook to set up deoptimized frames isn't supplied it.
|
||||||
|
assert(pc == NULL, "should be");
|
||||||
|
get_interpreterState()->set_thread((JavaThread *) thread);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool frame::safe_for_sender(JavaThread *thread) {
|
bool frame::safe_for_sender(JavaThread *thread) {
|
||||||
|
|
|
@ -45,27 +45,36 @@ inline frame::frame(ZeroFrame* zf, intptr_t* sp) {
|
||||||
case ZeroFrame::ENTRY_FRAME:
|
case ZeroFrame::ENTRY_FRAME:
|
||||||
_pc = StubRoutines::call_stub_return_pc();
|
_pc = StubRoutines::call_stub_return_pc();
|
||||||
_cb = NULL;
|
_cb = NULL;
|
||||||
|
_deopt_state = not_deoptimized;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ZeroFrame::INTERPRETER_FRAME:
|
case ZeroFrame::INTERPRETER_FRAME:
|
||||||
_pc = NULL;
|
_pc = NULL;
|
||||||
_cb = NULL;
|
_cb = NULL;
|
||||||
|
_deopt_state = not_deoptimized;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ZeroFrame::SHARK_FRAME:
|
case ZeroFrame::SHARK_FRAME: {
|
||||||
_pc = zero_sharkframe()->pc();
|
_pc = zero_sharkframe()->pc();
|
||||||
_cb = CodeCache::find_blob_unsafe(pc());
|
_cb = CodeCache::find_blob_unsafe(pc());
|
||||||
|
address original_pc = nmethod::get_deopt_original_pc(this);
|
||||||
|
if (original_pc != NULL) {
|
||||||
|
_pc = original_pc;
|
||||||
|
_deopt_state = is_deoptimized;
|
||||||
|
} else {
|
||||||
|
_deopt_state = not_deoptimized;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case ZeroFrame::FAKE_STUB_FRAME:
|
case ZeroFrame::FAKE_STUB_FRAME:
|
||||||
_pc = NULL;
|
_pc = NULL;
|
||||||
_cb = NULL;
|
_cb = NULL;
|
||||||
|
_deopt_state = not_deoptimized;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
ShouldNotReachHere();
|
ShouldNotReachHere();
|
||||||
}
|
}
|
||||||
_deopt_state = not_deoptimized;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Accessors
|
// Accessors
|
||||||
|
|
|
@ -68,6 +68,10 @@ class SharkFrame : public ZeroFrame {
|
||||||
return (address) value_of_word(pc_off);
|
return (address) value_of_word(pc_off);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void set_pc(address pc) const {
|
||||||
|
*((address*) addr_of_word(pc_off)) = pc;
|
||||||
|
}
|
||||||
|
|
||||||
intptr_t* unextended_sp() const {
|
intptr_t* unextended_sp() const {
|
||||||
return (intptr_t *) value_of_word(unextended_sp_off);
|
return (intptr_t *) value_of_word(unextended_sp_off);
|
||||||
}
|
}
|
||||||
|
|
|
@ -216,8 +216,6 @@ class AbstractAssembler : public ResourceObj {
|
||||||
bool isByte(int x) const { return 0 <= x && x < 0x100; }
|
bool isByte(int x) const { return 0 <= x && x < 0x100; }
|
||||||
bool isShiftCount(int x) const { return 0 <= x && x < 32; }
|
bool isShiftCount(int x) const { return 0 <= x && x < 32; }
|
||||||
|
|
||||||
void emit_long(jint x) { emit_int32(x); } // deprecated
|
|
||||||
|
|
||||||
// Instruction boundaries (required when emitting relocatable values).
|
// Instruction boundaries (required when emitting relocatable values).
|
||||||
class InstructionMark: public StackObj {
|
class InstructionMark: public StackObj {
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -3223,7 +3223,12 @@ bool GraphBuilder::try_inline(ciMethod* callee, bool holder_known, Bytecodes::Co
|
||||||
}
|
}
|
||||||
if (try_inline_full(callee, holder_known, bc, receiver))
|
if (try_inline_full(callee, holder_known, bc, receiver))
|
||||||
return true;
|
return true;
|
||||||
print_inlining(callee, _inline_bailout_msg, /*success*/ false);
|
|
||||||
|
// Entire compilation could fail during try_inline_full call.
|
||||||
|
// In that case printing inlining decision info is useless.
|
||||||
|
if (!bailed_out())
|
||||||
|
print_inlining(callee, _inline_bailout_msg, /*success*/ false);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3753,7 +3758,8 @@ bool GraphBuilder::try_inline_full(ciMethod* callee, bool holder_known, Bytecode
|
||||||
push_scope(callee, cont);
|
push_scope(callee, cont);
|
||||||
|
|
||||||
// the BlockListBuilder for the callee could have bailed out
|
// the BlockListBuilder for the callee could have bailed out
|
||||||
CHECK_BAILOUT_(false);
|
if (bailed_out())
|
||||||
|
return false;
|
||||||
|
|
||||||
// Temporarily set up bytecode stream so we can append instructions
|
// Temporarily set up bytecode stream so we can append instructions
|
||||||
// (only using the bci of this stream)
|
// (only using the bci of this stream)
|
||||||
|
@ -3819,7 +3825,8 @@ bool GraphBuilder::try_inline_full(ciMethod* callee, bool holder_known, Bytecode
|
||||||
iterate_all_blocks(callee_start_block == NULL);
|
iterate_all_blocks(callee_start_block == NULL);
|
||||||
|
|
||||||
// If we bailed out during parsing, return immediately (this is bad news)
|
// If we bailed out during parsing, return immediately (this is bad news)
|
||||||
if (bailed_out()) return false;
|
if (bailed_out())
|
||||||
|
return false;
|
||||||
|
|
||||||
// iterate_all_blocks theoretically traverses in random order; in
|
// iterate_all_blocks theoretically traverses in random order; in
|
||||||
// practice, we have only traversed the continuation if we are
|
// practice, we have only traversed the continuation if we are
|
||||||
|
@ -3828,9 +3835,6 @@ bool GraphBuilder::try_inline_full(ciMethod* callee, bool holder_known, Bytecode
|
||||||
!continuation()->is_set(BlockBegin::was_visited_flag),
|
!continuation()->is_set(BlockBegin::was_visited_flag),
|
||||||
"continuation should not have been parsed yet if we created it");
|
"continuation should not have been parsed yet if we created it");
|
||||||
|
|
||||||
// If we bailed out during parsing, return immediately (this is bad news)
|
|
||||||
CHECK_BAILOUT_(false);
|
|
||||||
|
|
||||||
// At this point we are almost ready to return and resume parsing of
|
// At this point we are almost ready to return and resume parsing of
|
||||||
// the caller back in the GraphBuilder. The only thing we want to do
|
// the caller back in the GraphBuilder. The only thing we want to do
|
||||||
// first is an optimization: during parsing of the callee we
|
// first is an optimization: during parsing of the callee we
|
||||||
|
@ -4171,7 +4175,10 @@ void GraphBuilder::print_inlining(ciMethod* callee, const char* msg, bool succes
|
||||||
else
|
else
|
||||||
log->inline_success("receiver is statically known");
|
log->inline_success("receiver is statically known");
|
||||||
} else {
|
} else {
|
||||||
log->inline_fail(msg);
|
if (msg != NULL)
|
||||||
|
log->inline_fail(msg);
|
||||||
|
else
|
||||||
|
log->inline_fail("reason unknown");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2259,7 +2259,7 @@ class LIR_OpVisitState: public StackObj {
|
||||||
typedef enum { inputMode, firstMode = inputMode, tempMode, outputMode, numModes, invalidMode = -1 } OprMode;
|
typedef enum { inputMode, firstMode = inputMode, tempMode, outputMode, numModes, invalidMode = -1 } OprMode;
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
maxNumberOfOperands = 16,
|
maxNumberOfOperands = 20,
|
||||||
maxNumberOfInfos = 4
|
maxNumberOfInfos = 4
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -147,7 +147,7 @@
|
||||||
"Inline methods containing exception handlers " \
|
"Inline methods containing exception handlers " \
|
||||||
"(NOTE: does not work with current backend)") \
|
"(NOTE: does not work with current backend)") \
|
||||||
\
|
\
|
||||||
develop(bool, InlineSynchronizedMethods, true, \
|
product(bool, InlineSynchronizedMethods, true, \
|
||||||
"Inline synchronized methods") \
|
"Inline synchronized methods") \
|
||||||
\
|
\
|
||||||
develop(bool, InlineNIOCheckIndex, true, \
|
develop(bool, InlineNIOCheckIndex, true, \
|
||||||
|
|
|
@ -59,6 +59,19 @@ bool ciType::is_subtype_of(ciType* type) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------
|
||||||
|
// ciType::name
|
||||||
|
//
|
||||||
|
// Return the name of this type
|
||||||
|
const char* ciType::name() {
|
||||||
|
if (is_primitive_type()) {
|
||||||
|
return type2name(basic_type());
|
||||||
|
} else {
|
||||||
|
assert(is_klass(), "must be");
|
||||||
|
return as_klass()->name()->as_utf8();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------
|
// ------------------------------------------------------------------
|
||||||
// ciType::print_impl
|
// ciType::print_impl
|
||||||
//
|
//
|
||||||
|
@ -73,7 +86,8 @@ void ciType::print_impl(outputStream* st) {
|
||||||
//
|
//
|
||||||
// Print the name of this type
|
// Print the name of this type
|
||||||
void ciType::print_name_on(outputStream* st) {
|
void ciType::print_name_on(outputStream* st) {
|
||||||
st->print(type2name(basic_type()));
|
ResourceMark rm;
|
||||||
|
st->print(name());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -77,6 +77,7 @@ public:
|
||||||
bool is_type() const { return true; }
|
bool is_type() const { return true; }
|
||||||
bool is_classless() const { return is_primitive_type(); }
|
bool is_classless() const { return is_primitive_type(); }
|
||||||
|
|
||||||
|
const char* name();
|
||||||
virtual void print_name_on(outputStream* st);
|
virtual void print_name_on(outputStream* st);
|
||||||
void print_name() {
|
void print_name() {
|
||||||
print_name_on(tty);
|
print_name_on(tty);
|
||||||
|
|
|
@ -2503,26 +2503,38 @@ Array<Method*>* ClassFileParser::parse_methods(ClassLoaderData* loader_data,
|
||||||
*has_default_methods = true;
|
*has_default_methods = true;
|
||||||
}
|
}
|
||||||
methods->at_put(index, method());
|
methods->at_put(index, method());
|
||||||
if (*methods_annotations == NULL) {
|
|
||||||
*methods_annotations =
|
if (method_annotations != NULL) {
|
||||||
MetadataFactory::new_array<AnnotationArray*>(loader_data, length, NULL, CHECK_NULL);
|
if (*methods_annotations == NULL) {
|
||||||
|
*methods_annotations =
|
||||||
|
MetadataFactory::new_array<AnnotationArray*>(loader_data, length, NULL, CHECK_NULL);
|
||||||
|
}
|
||||||
|
(*methods_annotations)->at_put(index, method_annotations);
|
||||||
}
|
}
|
||||||
(*methods_annotations)->at_put(index, method_annotations);
|
|
||||||
if (*methods_parameter_annotations == NULL) {
|
if (method_parameter_annotations != NULL) {
|
||||||
*methods_parameter_annotations =
|
if (*methods_parameter_annotations == NULL) {
|
||||||
MetadataFactory::new_array<AnnotationArray*>(loader_data, length, NULL, CHECK_NULL);
|
*methods_parameter_annotations =
|
||||||
|
MetadataFactory::new_array<AnnotationArray*>(loader_data, length, NULL, CHECK_NULL);
|
||||||
|
}
|
||||||
|
(*methods_parameter_annotations)->at_put(index, method_parameter_annotations);
|
||||||
}
|
}
|
||||||
(*methods_parameter_annotations)->at_put(index, method_parameter_annotations);
|
|
||||||
if (*methods_default_annotations == NULL) {
|
if (method_default_annotations != NULL) {
|
||||||
*methods_default_annotations =
|
if (*methods_default_annotations == NULL) {
|
||||||
MetadataFactory::new_array<AnnotationArray*>(loader_data, length, NULL, CHECK_NULL);
|
*methods_default_annotations =
|
||||||
|
MetadataFactory::new_array<AnnotationArray*>(loader_data, length, NULL, CHECK_NULL);
|
||||||
|
}
|
||||||
|
(*methods_default_annotations)->at_put(index, method_default_annotations);
|
||||||
}
|
}
|
||||||
(*methods_default_annotations)->at_put(index, method_default_annotations);
|
|
||||||
if (*methods_type_annotations == NULL) {
|
if (method_type_annotations != NULL) {
|
||||||
*methods_type_annotations =
|
if (*methods_type_annotations == NULL) {
|
||||||
MetadataFactory::new_array<AnnotationArray*>(loader_data, length, NULL, CHECK_NULL);
|
*methods_type_annotations =
|
||||||
|
MetadataFactory::new_array<AnnotationArray*>(loader_data, length, NULL, CHECK_NULL);
|
||||||
|
}
|
||||||
|
(*methods_type_annotations)->at_put(index, method_type_annotations);
|
||||||
}
|
}
|
||||||
(*methods_type_annotations)->at_put(index, method_type_annotations);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_need_verify && length > 1) {
|
if (_need_verify && length > 1) {
|
||||||
|
@ -3338,8 +3350,7 @@ instanceKlassHandle ClassFileParser::parseClassFile(Symbol* name,
|
||||||
bool has_final_method = false;
|
bool has_final_method = false;
|
||||||
AccessFlags promoted_flags;
|
AccessFlags promoted_flags;
|
||||||
promoted_flags.set_flags(0);
|
promoted_flags.set_flags(0);
|
||||||
// These need to be oop pointers because they are allocated lazily
|
|
||||||
// inside parse_methods inside a nested HandleMark
|
|
||||||
Array<AnnotationArray*>* methods_annotations = NULL;
|
Array<AnnotationArray*>* methods_annotations = NULL;
|
||||||
Array<AnnotationArray*>* methods_parameter_annotations = NULL;
|
Array<AnnotationArray*>* methods_parameter_annotations = NULL;
|
||||||
Array<AnnotationArray*>* methods_default_annotations = NULL;
|
Array<AnnotationArray*>* methods_default_annotations = NULL;
|
||||||
|
|
|
@ -318,6 +318,7 @@ ClassLoaderData::~ClassLoaderData() {
|
||||||
}
|
}
|
||||||
|
|
||||||
Metaspace* ClassLoaderData::metaspace_non_null() {
|
Metaspace* ClassLoaderData::metaspace_non_null() {
|
||||||
|
assert(!DumpSharedSpaces, "wrong metaspace!");
|
||||||
// If the metaspace has not been allocated, create a new one. Might want
|
// If the metaspace has not been allocated, create a new one. Might want
|
||||||
// to create smaller arena for Reflection class loaders also.
|
// to create smaller arena for Reflection class loaders also.
|
||||||
// The reason for the delayed allocation is because some class loaders are
|
// The reason for the delayed allocation is because some class loaders are
|
||||||
|
@ -330,10 +331,19 @@ Metaspace* ClassLoaderData::metaspace_non_null() {
|
||||||
}
|
}
|
||||||
if (this == the_null_class_loader_data()) {
|
if (this == the_null_class_loader_data()) {
|
||||||
assert (class_loader() == NULL, "Must be");
|
assert (class_loader() == NULL, "Must be");
|
||||||
size_t word_size = Metaspace::first_chunk_word_size();
|
set_metaspace(new Metaspace(_metaspace_lock, Metaspace::BootMetaspaceType));
|
||||||
set_metaspace(new Metaspace(_metaspace_lock, word_size));
|
} else if (is_anonymous()) {
|
||||||
|
if (TraceClassLoaderData && Verbose && class_loader() != NULL) {
|
||||||
|
tty->print_cr("is_anonymous: %s", class_loader()->klass()->internal_name());
|
||||||
|
}
|
||||||
|
set_metaspace(new Metaspace(_metaspace_lock, Metaspace::AnonymousMetaspaceType));
|
||||||
|
} else if (class_loader()->is_a(SystemDictionary::reflect_DelegatingClassLoader_klass())) {
|
||||||
|
if (TraceClassLoaderData && Verbose && class_loader() != NULL) {
|
||||||
|
tty->print_cr("is_reflection: %s", class_loader()->klass()->internal_name());
|
||||||
|
}
|
||||||
|
set_metaspace(new Metaspace(_metaspace_lock, Metaspace::ReflectionMetaspaceType));
|
||||||
} else {
|
} else {
|
||||||
set_metaspace(new Metaspace(_metaspace_lock)); // default size for now.
|
set_metaspace(new Metaspace(_metaspace_lock, Metaspace::StandardMetaspaceType));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return _metaspace;
|
return _metaspace;
|
||||||
|
@ -672,8 +682,8 @@ void ClassLoaderData::initialize_shared_metaspaces() {
|
||||||
"only supported for null loader data for now");
|
"only supported for null loader data for now");
|
||||||
assert (!_shared_metaspaces_initialized, "only initialize once");
|
assert (!_shared_metaspaces_initialized, "only initialize once");
|
||||||
MutexLockerEx ml(metaspace_lock(), Mutex::_no_safepoint_check_flag);
|
MutexLockerEx ml(metaspace_lock(), Mutex::_no_safepoint_check_flag);
|
||||||
_ro_metaspace = new Metaspace(_metaspace_lock, SharedReadOnlySize/wordSize);
|
_ro_metaspace = new Metaspace(_metaspace_lock, Metaspace::ROMetaspaceType);
|
||||||
_rw_metaspace = new Metaspace(_metaspace_lock, SharedReadWriteSize/wordSize);
|
_rw_metaspace = new Metaspace(_metaspace_lock, Metaspace::ReadWriteMetaspaceType);
|
||||||
_shared_metaspaces_initialized = true;
|
_shared_metaspaces_initialized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
*
|
*
|
||||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE.See the GNU General Public License
|
* 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
|
* version 2 for more details (a copy is included in the LICENSE file that
|
||||||
* accompanied this code).
|
* accompanied this code).
|
||||||
*
|
*
|
||||||
|
|
|
@ -1285,13 +1285,15 @@ static void merge_in_new_methods(InstanceKlass* klass,
|
||||||
|
|
||||||
enum { ANNOTATIONS, PARAMETERS, DEFAULTS, NUM_ARRAYS };
|
enum { ANNOTATIONS, PARAMETERS, DEFAULTS, NUM_ARRAYS };
|
||||||
|
|
||||||
Array<AnnotationArray*>* original_annots[NUM_ARRAYS];
|
Array<AnnotationArray*>* original_annots[NUM_ARRAYS] = { NULL };
|
||||||
|
|
||||||
Array<Method*>* original_methods = klass->methods();
|
Array<Method*>* original_methods = klass->methods();
|
||||||
Annotations* annots = klass->annotations();
|
Annotations* annots = klass->annotations();
|
||||||
original_annots[ANNOTATIONS] = annots->methods_annotations();
|
if (annots != NULL) {
|
||||||
original_annots[PARAMETERS] = annots->methods_parameter_annotations();
|
original_annots[ANNOTATIONS] = annots->methods_annotations();
|
||||||
original_annots[DEFAULTS] = annots->methods_default_annotations();
|
original_annots[PARAMETERS] = annots->methods_parameter_annotations();
|
||||||
|
original_annots[DEFAULTS] = annots->methods_default_annotations();
|
||||||
|
}
|
||||||
|
|
||||||
Array<int>* original_ordering = klass->method_ordering();
|
Array<int>* original_ordering = klass->method_ordering();
|
||||||
Array<int>* merged_ordering = Universe::the_empty_int_array();
|
Array<int>* merged_ordering = Universe::the_empty_int_array();
|
||||||
|
@ -1370,9 +1372,15 @@ static void merge_in_new_methods(InstanceKlass* klass,
|
||||||
|
|
||||||
// Replace klass methods with new merged lists
|
// Replace klass methods with new merged lists
|
||||||
klass->set_methods(merged_methods);
|
klass->set_methods(merged_methods);
|
||||||
annots->set_methods_annotations(merged_annots[ANNOTATIONS]);
|
if (annots != NULL) {
|
||||||
annots->set_methods_parameter_annotations(merged_annots[PARAMETERS]);
|
annots->set_methods_annotations(merged_annots[ANNOTATIONS]);
|
||||||
annots->set_methods_default_annotations(merged_annots[DEFAULTS]);
|
annots->set_methods_parameter_annotations(merged_annots[PARAMETERS]);
|
||||||
|
annots->set_methods_default_annotations(merged_annots[DEFAULTS]);
|
||||||
|
} else {
|
||||||
|
assert(merged_annots[ANNOTATIONS] == NULL, "Must be");
|
||||||
|
assert(merged_annots[PARAMETERS] == NULL, "Must be");
|
||||||
|
assert(merged_annots[DEFAULTS] == NULL, "Must be");
|
||||||
|
}
|
||||||
|
|
||||||
ClassLoaderData* cld = klass->class_loader_data();
|
ClassLoaderData* cld = klass->class_loader_data();
|
||||||
MetadataFactory::free_array(cld, original_methods);
|
MetadataFactory::free_array(cld, original_methods);
|
||||||
|
|
|
@ -687,19 +687,6 @@ void java_lang_Class::set_array_klass(oop java_class, Klass* klass) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Method* java_lang_Class::resolved_constructor(oop java_class) {
|
|
||||||
Metadata* constructor = java_class->metadata_field(_resolved_constructor_offset);
|
|
||||||
assert(constructor == NULL || constructor->is_method(), "should be method");
|
|
||||||
return ((Method*)constructor);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void java_lang_Class::set_resolved_constructor(oop java_class, Method* constructor) {
|
|
||||||
assert(constructor->is_method(), "should be method");
|
|
||||||
java_class->metadata_field_put(_resolved_constructor_offset, constructor);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool java_lang_Class::is_primitive(oop java_class) {
|
bool java_lang_Class::is_primitive(oop java_class) {
|
||||||
// should assert:
|
// should assert:
|
||||||
//assert(java_lang_Class::is_instance(java_class), "must be a Class object");
|
//assert(java_lang_Class::is_instance(java_class), "must be a Class object");
|
||||||
|
@ -2949,7 +2936,6 @@ int java_lang_System::err_offset_in_bytes() {
|
||||||
|
|
||||||
int java_lang_Class::_klass_offset;
|
int java_lang_Class::_klass_offset;
|
||||||
int java_lang_Class::_array_klass_offset;
|
int java_lang_Class::_array_klass_offset;
|
||||||
int java_lang_Class::_resolved_constructor_offset;
|
|
||||||
int java_lang_Class::_oop_size_offset;
|
int java_lang_Class::_oop_size_offset;
|
||||||
int java_lang_Class::_static_oop_field_count_offset;
|
int java_lang_Class::_static_oop_field_count_offset;
|
||||||
GrowableArray<Klass*>* java_lang_Class::_fixup_mirror_list = NULL;
|
GrowableArray<Klass*>* java_lang_Class::_fixup_mirror_list = NULL;
|
||||||
|
@ -3303,7 +3289,6 @@ void JavaClasses::check_offsets() {
|
||||||
// Fake fields
|
// Fake fields
|
||||||
// CHECK_OFFSET("java/lang/Class", java_lang_Class, klass); // %%% this needs to be checked
|
// CHECK_OFFSET("java/lang/Class", java_lang_Class, klass); // %%% this needs to be checked
|
||||||
// CHECK_OFFSET("java/lang/Class", java_lang_Class, array_klass); // %%% this needs to be checked
|
// CHECK_OFFSET("java/lang/Class", java_lang_Class, array_klass); // %%% this needs to be checked
|
||||||
// CHECK_OFFSET("java/lang/Class", java_lang_Class, resolved_constructor); // %%% this needs to be checked
|
|
||||||
|
|
||||||
// java.lang.Throwable
|
// java.lang.Throwable
|
||||||
|
|
||||||
|
|
|
@ -206,7 +206,6 @@ class java_lang_String : AllStatic {
|
||||||
|
|
||||||
#define CLASS_INJECTED_FIELDS(macro) \
|
#define CLASS_INJECTED_FIELDS(macro) \
|
||||||
macro(java_lang_Class, klass, intptr_signature, false) \
|
macro(java_lang_Class, klass, intptr_signature, false) \
|
||||||
macro(java_lang_Class, resolved_constructor, intptr_signature, false) \
|
|
||||||
macro(java_lang_Class, array_klass, intptr_signature, false) \
|
macro(java_lang_Class, array_klass, intptr_signature, false) \
|
||||||
macro(java_lang_Class, oop_size, int_signature, false) \
|
macro(java_lang_Class, oop_size, int_signature, false) \
|
||||||
macro(java_lang_Class, static_oop_field_count, int_signature, false)
|
macro(java_lang_Class, static_oop_field_count, int_signature, false)
|
||||||
|
@ -218,7 +217,6 @@ class java_lang_Class : AllStatic {
|
||||||
// The fake offsets are added by the class loader when java.lang.Class is loaded
|
// The fake offsets are added by the class loader when java.lang.Class is loaded
|
||||||
|
|
||||||
static int _klass_offset;
|
static int _klass_offset;
|
||||||
static int _resolved_constructor_offset;
|
|
||||||
static int _array_klass_offset;
|
static int _array_klass_offset;
|
||||||
|
|
||||||
static int _oop_size_offset;
|
static int _oop_size_offset;
|
||||||
|
@ -254,15 +252,11 @@ class java_lang_Class : AllStatic {
|
||||||
static bool is_primitive(oop java_class);
|
static bool is_primitive(oop java_class);
|
||||||
static BasicType primitive_type(oop java_class);
|
static BasicType primitive_type(oop java_class);
|
||||||
static oop primitive_mirror(BasicType t);
|
static oop primitive_mirror(BasicType t);
|
||||||
// JVM_NewInstance support
|
|
||||||
static Method* resolved_constructor(oop java_class);
|
|
||||||
static void set_resolved_constructor(oop java_class, Method* constructor);
|
|
||||||
// JVM_NewArray support
|
// JVM_NewArray support
|
||||||
static Klass* array_klass(oop java_class);
|
static Klass* array_klass(oop java_class);
|
||||||
static void set_array_klass(oop java_class, Klass* klass);
|
static void set_array_klass(oop java_class, Klass* klass);
|
||||||
// compiler support for class operations
|
// compiler support for class operations
|
||||||
static int klass_offset_in_bytes() { return _klass_offset; }
|
static int klass_offset_in_bytes() { return _klass_offset; }
|
||||||
static int resolved_constructor_offset_in_bytes() { return _resolved_constructor_offset; }
|
|
||||||
static int array_klass_offset_in_bytes() { return _array_klass_offset; }
|
static int array_klass_offset_in_bytes() { return _array_klass_offset; }
|
||||||
// Support for classRedefinedCount field
|
// Support for classRedefinedCount field
|
||||||
static int classRedefinedCount(oop the_class_mirror);
|
static int classRedefinedCount(oop the_class_mirror);
|
||||||
|
|
|
@ -386,7 +386,6 @@
|
||||||
template(basicType_name, "basicType") \
|
template(basicType_name, "basicType") \
|
||||||
template(append_name, "append") \
|
template(append_name, "append") \
|
||||||
template(klass_name, "klass") \
|
template(klass_name, "klass") \
|
||||||
template(resolved_constructor_name, "resolved_constructor") \
|
|
||||||
template(array_klass_name, "array_klass") \
|
template(array_klass_name, "array_klass") \
|
||||||
template(oop_size_name, "oop_size") \
|
template(oop_size_name, "oop_size") \
|
||||||
template(static_oop_field_count_name, "static_oop_field_count") \
|
template(static_oop_field_count_name, "static_oop_field_count") \
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue