| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
| |
Use of the LDRD instruction form LDRD Rt, Rt2, [Rn, Rm] has restrictions
on the register combinations - specifically if Rt or Rt2 is equal to Rn or
Rm the behaviour is defined as 'UNPREDICTABLE'.
Change-Id: I19834783865e07897cc7012367e698447f023ce6
|
| |
|
|
|
|
|
|
|
|
|
| |
Use software floating point instructions in opcode implementations of
OP_CMPL_FLOAT, OP_CMPG_FLOAT, OP_CMPL_DOUBLE, and OP_CMPG_DOUBLE. This
is done to workaround the problem with comparison operation when one
of the operand is NaN.
CRs-fixed: 226903
Change-Id: I056c77510802536b3b7f6cefea6c0e241077a837
|
| |
|
|
| |
This reverts commit 551399a95b2ceb3e382785f4d8165822f1491493.
|
| |\
| |
| |
| |
| |
| | |
Conflicts:
libcore/regex/src/main/java/java/util/regex/Pattern.java
vm/oo/Class.c
|
| | |\
| | |
| | |
| | | |
byte-code interpreter engine. This is an initial contribution with minimal optimizations that target the Intel ATOM processor. We expect to continuously improve this code. It is expected that there will be a discussion on the potential merge of this code and similar efforts (i.e. the mterp/x86 directory first included with cupcake). While this code is intended to target ATOM and not a generic X-86 processor, we were able to show the following improvements over the c-portable interpreter using the simulator build: Build: TARGET_SIMULATOR: true TARGET_BUILD_TYPE: release TARGET_PRODUCT: sim Environment: Intel(R) Core(TM)2 Quad CPU Q9550 @ 2.83GHz PI = Portable Interpreter IA = Fast IA Interpreter Embedded CaffeineMark: (IA-PI)/PI: Average of 70% improvement on overall score SPECjbb2000*: (IA-PI)/PI: Average of 37% improvement on raw score SPECjvm98*: (PI/IA) Speedup: Mtrt: 1.2; Jess: 1.34; Compress: 1.57; Db: 1.46; Jack: 1.28 * SPECjbb2000 - 1 warehouse. Noncompliant - modified to run on Dalvik * SPECjvm98 - Noncompliant - modified to run on Dalivk"
|
| | | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
interpreter engine. This is an initial contribution with minimal optimizations that target the Intel ATOM processor. We expect to continuously improve this code. It is expected that there will be a discussion on the potential merge of this code and similar efforts (i.e. the mterp/x86 directory first included with cupcake). While this code is intended to target ATOM and not a generic X-86 processor, we were able to show the following improvements over the c-portable interpreter using the simulator build:
Build: TARGET_SIMULATOR: true
TARGET_BUILD_TYPE: release
TARGET_PRODUCT: sim
Environment: Intel(R) Core(TM)2 Quad CPU Q9550 @ 2.83GHz
PI = Portable Interpreter
IA = Fast IA Interpreter
Embedded CaffeineMark: (IA-PI)/PI: Average of 70% improvement on overall score
SPECjbb2000*: (IA-PI)/PI: Average of 37% improvement on raw score
SPECjvm98*: (PI/IA) Speedup: Mtrt: 1.2; Jess: 1.34; Compress: 1.57; Db: 1.46; Jack: 1.28
* SPECjbb2000 - 1 warehouse. Noncompliant - modified to run on Dalvik
* SPECjvm98 - Noncompliant - modified to run on Dalivk
|
| | |\ \
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
construction mechanism be able to handle exception constructors that take Object instead of String. (2) Add a convenience in JNIHelp to throw RuntimeExceptions.
Merge commit '4a888b09be2ade9fc5bb0137f702b3be889679a9' into eclair-plus-aosp
* commit '4a888b09be2ade9fc5bb0137f702b3be889679a9':
Two exception-related tweaks: (1) Make the dynamic exception construction
|
| | |\ \ \
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
Merge commit 'bb710e3294c57587f327c5e365353af81aa2cb5f' into eclair-plus-aosp
* commit 'bb710e3294c57587f327c5e365353af81aa2cb5f':
Remove ((noreturn)) from dvmAbort().
|
| | |\ \ \ \
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
Merge commit 'bdfa9937a8fc8230ca109774ccc1eafaa20ba1a7' into eclair-plus-aosp
* commit 'bdfa9937a8fc8230ca109774ccc1eafaa20ba1a7':
Allow dalvik pre-optimization to run in ARMv7 emulator.
|
| | |\ \ \ \ \
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
Merge commit 'da03242fe03a5ab342a6310b1e754e131ea628c9' into eclair-plus-aosp
* commit 'da03242fe03a5ab342a6310b1e754e131ea628c9':
dalvik: Switch to common cutils sched_policy api
|
| | |\ \ \ \ \ \
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | |
Merge commit 'efa0dcd52c030d2ace844070902979dd09e2c881' into eclair-plus-aosp
* commit 'efa0dcd52c030d2ace844070902979dd09e2c881':
Addressed reviewer comments.
|
| | |\ \ \ \ \ \ \
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | | |
gettid() bug
Merge commit '20677ed1a7114a2aa51086d5097f6328cd4fb94d' into eclair-plus-aosp
* commit '20677ed1a7114a2aa51086d5097f6328cd4fb94d':
dalvik: Use common SchedPolicy type and fix getpid() vs. gettid() bug
|
| | |\ \ \ \ \ \ \ \
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | | |
Merge commit '03c7547c40e6fc5b29b929b64f114e2dd3894e8e' into eclair-plus-aosp
* commit '03c7547c40e6fc5b29b929b64f114e2dd3894e8e':
vm: Add support for using scheduler policies instead of cgroups
|
| | |\ \ \ \ \ \ \ \ \
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | | |
with JIT.
Merge commit '500464deb29dc8bfc7b5e51ab0fdffa6fa51b5d7' into eclair-plus-aosp
* commit '500464deb29dc8bfc7b5e51ab0fdffa6fa51b5d7':
DO NOT MERGE: Do not enable JIT_TUNING and assertion by default with JIT.
|
| | |\ \ \ \ \ \ \ \ \ \
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | | |
Added a function that queries the native thread status. Modified the profiler to sample every thread at a fixed interval instead of adjusting the delay based on the number of threads. This wil
Merge commit '9dc72a3c54af7201b6b85d96dba23a5f85309d9b' into eclair-plus-aosp
* commit '9dc72a3c54af7201b6b85d96dba23a5f85309d9b':
Modified Thread.c to allow sampling profiler thread in zygote. Added a function that
|
| | |\ \ \ \ \ \ \ \ \ \ \
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | | |
Merge commit 'ed974e9ea6220b363d2f093d1a2d4bf4b8f3c429' into eclair-plus-aosp
* commit 'ed974e9ea6220b363d2f093d1a2d4bf4b8f3c429':
Fix x86 call bridge
|
| | |\ \ \ \ \ \ \ \ \ \ \ \
| | | | | | | | | | | | | |
| | | | | | | | | | | | | |
| | | | | | | | | | | | | |
| | | | | | | | | | | | | |
| | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
Merge commit 'c19d2a1d798d8626f196d878abcf23a14bee40af' into eclair-plus-aosp
* commit 'c19d2a1d798d8626f196d878abcf23a14bee40af':
Fix two calls to memset(3) whose arguments were reversed.
|
| | |\ \ \ \ \ \ \ \ \ \ \ \ \ |
|
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
Float score improvements from 772 to 828.
CaffeineMark Embedded
(before)
Sieve score = 950 (98)
Loop score = 775 (2017)
Logic score = 1104 (0)
String score = 1898 (708)
Float score = 772 (185)
Method score = 1032 (166650)
Overall score = 1034
(after)
Sieve score = 951 (98)
Loop score = 775 (2017)
Logic score = 1105 (0)
String score = 2042 (708)
Float score = 828 (185)
Method score = 1032 (166650)
Overall score = 1060
Reference:
http://blog.kmckk.com/archives/1475184.html
http://blog.kmckk.com/archives/1486485.html
(cherry picked from commit 563f2fec5832837244d9ef32b6e76e2041e646b4)
Signed-off-by: Tick Chen <tick@0xlab.org>
|
| |\ \ \ \ \ \ \ \ \ \ \ \ \ \ \
| | |_|_|_|_|_|_|_|_|_|_|_|/ /
| |/| | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
eclair
|
| | | |_|_|_|_|_|_|_|_|_|_|/ /
| |/| | | | | | | | | | | |
| | | | | | | | | | | | | |
| | | | | | | | | | | | | |
| | | | | | | | | | | | | |
| | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
mechanism be able to handle exception constructors that take Object instead
of String. (2) Add a convenience in JNIHelp to throw RuntimeExceptions.
Change-Id: Ie5ce680c30043a4b186e59d7c8883666648b2c87
|
| | | |_|_|_|_|_|_|_|_|_|/ /
| |/| | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | | |
Functions that could call dvmAbort() from more than one place were
merging the calls together, which is great until you need to decode a
native stack trace.
For 2144313.
|
| | | |_|_|_|_|_|_|_|_|/ /
| |/| | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | | |
This sad hack is used to allow the Dex preopt pass to run properly
in ARMv7 emulation mode. Without it, the function dvmComputeWidths()
aborts the VM in ways that are hard to properly understand.
This issue has been discussed extensively with fadden, which provided
the patch. It seems that adding both log lines fixes it, but only using
one will not. I'm suspecting an emulation bug, or even worse, a C compiler
bug that would generate invalid machine code.
NOTE: The dex pre-optimization pass of user builds requires to run
the DexOpt in the emulator for all -user builds. While this patch
might not fix the underlying issue, it allows us to generate these
images correctly (along with a few other system hacks).
|
| | | |_|_|_|_|_|_|_|/ /
| |/| | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | | |
Signed-off-by: San Mehat <san@google.com>
|
| | | |_|_|_|_|_|_|/ /
| |/| | | | | | | | |
|
| | | |_|_|_|_|_|/ /
| |/| | | | | | |
| | | | | | | | |
| | | | | | | | | |
Signed-off-by: San Mehat <san@google.com>
|
| | |\ \ \ \ \ \ \ \
| | |_|_|_|_|_|/ /
| |/| | | | | | |
| | | | | | | | |
| | | | | | | | | |
* changes:
vm: Add support for using scheduler policies instead of cgroups
|
| | | | |_|_|_|/ /
| | |/| | | | |
| | | | | | | |
| | | | | | | | |
Signed-off-by: San Mehat <san@google.com>
|
| | |/ / / / / / |
|
| | | |_|_|/ /
| |/| | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
function that
queries the native thread status. Modified the profiler to sample every thread at
a fixed interval instead of adjusting the delay based on the number of threads. This
will make it easier to compare results across apps. Added ability to shut down
the profiler thread. Added code to track whether the method was a leaf or a
caller.
|
| | |\ \ \ \ \
| | |_|_|/ /
| |/| | | |
| | | | | |
| | | | | | |
* changes:
Fix x86 call bridge
|
| | | |/ / / |
|
| | |/ / /
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
External bug 3358 reported the libcore/x-net instance. Manual inspection
turned up another instance in vm, but nothing else in the dalvik package.
Tested by booting sapphire-eng and running the x-net tests.
Bug: 1999244
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
This excludes some things that used to be common between the direct and
indirect reference implementations. The goal is to restore the original
method call performance. In particular, we no longer convert native
method arguments to local references when USE_INDIRECT_REF is not
defined.
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
The code was assuming that the reference type could always be inferred
from the error code, but in two cases it couldn't. This resulted in a
weird string appearing where the class name should be in the exception.
The type is now explicitly stuffed into the replacement instruction.
I added one additional test to 075; with this, plus 003 and 077, I think
we have full coverage.
For bug 2084560.
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Convert where needed, don't convert where not needed, and make sure
we're using the right one.
With this, my ad-hoc tests pass, and the boot proceeds until we hit a
failure that looks like it might be due to logic outside the VM.
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
This change adds a not-really-working implementation to Jni.c, with
various changes #ifdefed throughout the code. The ifdef is currently
disabled, so the old behavior should continue. Eventually the old
version will be stripped out and the ifdefs removed.
This renames the stack's "localRefTop" field, which nudged a bunch of
code. The name wasn't really right before (it's the *bottom* of the
local references), and it's even less right now. This and one other
mterp-visible constant were changed, which caused some ripples through
mterp and the JIT, but the ifdeffing was limited to one in
asm-constants.h (and the constant is the same both ways, so toggling the
ifdef won't require rebuilding asm sources).
Some comments and arg names in ReferenceTable were updated for the
correct orientation of bottom vs. top.
Some adjustments were made to the JNI code, e.g. dvmCallMethod now needs
to understand if it needs to convert reference arguments from
local/global refs to pointers (it's called from various places
throughout the VM).
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
This changes the JNI method call mechanism to register all reference
arguments as local refs, as well as the "this" argument (for virtual
calls) and the class object (for static calls).
Before now we skipped this part, because we're handing raw object
pointers around, and we know that all of the arguments can be found by
the GC on the interpreted stack. In fact, there's no need to add the
arguments for GC-correctness; rather, we need to do this to rewrite the
pointers we hand to native code.
This change impacts JNI method call performance, especially for functions
with a large number of reference arguments. To improve things a little,
there are now four "call bridge" functions:
(1) general handler
(2) synchronized method handler (grabs lock, calls #1)
(3) virtual method, no reference args
(4) static method, no reference args
While booting the system, the virtual/static no-ref handlers are used
for about 70% of calls. Since these don't have to scan the method
signature to look for reference arguments, they're a bit faster.
At this point we're still passing raw pointers around, so nothing should
really change.
|
| | | | |
| | | |
| | | |
| | | |
| | | | |
Not sure why we didn't just do this in the first place. I get "x86_64"
on desktop and "armv6l" on a sapphire.
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
We have to pin primitive arrays for certain JNI operations (it's that or
return a copy of the contents). We don't move objects around in the
virtual heap, so simply creating a global reference is enough to ensure
the correct behavior of the calls.
The global reference implementation is changing in a way that makes
this approach inconvenient, so we now have a separate table for pinned
primitive arrays.
As a bonus, if GREF tracking is enabled, we will scan through the table
when a pin entry is added. If there are 10 or more entries for the same
array, a complaint is logged. This should allow us to find mismatched
Get/Release sequences much more easily (before you had to wait until the
global reference table exploded).
We currently scan pin table entries at the same time as the JNI global
references, so they'll still show up in hprof dumps as such. (Could
also add a new Android-specific hprof root category, but that seems like
more trouble than it's worth.)
|
| | |\ \ \
| | | | |
| | | | |
| | | | |
| | | | | |
* changes:
Progress toward indirect JNI references.
|
| | | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
Switch from simple typecasts to conversion functions for the objects
passed in and out of JNI calls. No real change here; object references
are still just pointers.
Use explicit pin/unpin calls for primitive arrays. For GetStringChars
we now pin the char[] rather than the String object. (Which doesn't
make much difference in the grand scheme of things, since you need to
keep the String to pass into the release function anyway.)
|
| | |\ \ \ \
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
* changes:
Fix a couple of compiler warnings.
|
| | | |/ / / |
|
| | |/ / /
| | | |
| | | |
| | | |
| | | | |
We allow expansion in dvmSetBit(), but failed to update the capacity
after doing so.
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
If the system has IPv6 connectivity, query the DNS for IPv6 addresses as well
as IPv4 addresses. If IPv6 addresses are returned, prefer them by default.
Impact of this change:
- If the device is on a network with IPv6 configured, is using wifi, and has
obtained an IPv6 address using autoconfiguration, the network stack will
request IPv6 addresses as well as IPv4 addresses when making DNS queries. This
allows the device to connect to websites and services that declare themselves
to be reachable over IPv6. If an IPv6 connection fails, the stack will fall
back to IPv4. This is what Windows Vista, Mac OS 10.4 and above, and most
Linux distributions do by default.
- If the device is not on a network that supports IPv6, or is using 3G/EVDO,
nothing will change.
I have been testing this change on self-compiled builds of master and eclair on
Dream and Sholes for several weeks with no breakage that I can see.
|
| | |\ \ \
| | | | |
| | | | |
| | | | |
| | | | | |
* changes:
Turn down RegisterMap paranoia.
|
| | | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
This disables verification of RegisterMap contents and compressed
output, as well as a GC-time check that double-checked the validity of a
register known to hold a reference.
For internal bug 1896437.
|
| | |/ / /
| | | |
| | | |
| | | |
| | | | |
Reduced a LOGI to LOGD, normalized format, added a similar message for a
field ID lookup that was failing (due to a bad flash, as it turns out).
|
| | | | |
| | | |
| | | |
| | | |
| | | | |
Bug fix for local optimization
Enable partial floating point store sinking (with significant perf gain!)
|