Joel Dice
1f67aea456
fix process=interpret build
2010-09-27 17:12:08 -06:00
Joel Dice
c1c9d2111b
remove GNU Classpath and Apache Harmony compatibility code
...
Rather than try to support mixing Avian's core classes with those of
an external class library -- which necessitates adding a lot of stub
methods which throw UnsupportedOperationExceptions, among other
comprimises -- we're looking to support such external class libraries
in their unmodified forms. The latter strategy has already proven
successful with OpenJDK's class library. Thus, this commit removes
the stub methods, etc., which not only cleans up the code but avoids
misleading application developers as to what classes and methods
Avian's built-in class library supports.
2010-09-27 15:58:02 -06:00
Joel Dice
8c789fb92c
return empty object array from MyProcessor::getStackTrace on failure
2010-09-27 09:39:44 -06:00
Joel Dice
1d4b54a9f6
fix failure to add abstract virtuals to class with no declared virtuals
2010-09-25 16:35:18 -06:00
Joel Dice
268d2de175
cache array class lookups in element class; misc. bugfixes
2010-09-25 15:54:01 -06:00
Joel Dice
a2cc95d196
remove trailing whitespace in compile.cpp
2010-09-25 15:52:43 -06:00
Joel Dice
e75b57a127
don't abort when compiling an array lookup with a constant negative index
...
Instead, just compile it as a direct call to the thunk which throws an
ArrayIndexOutOfBoundsException.
2010-09-25 15:48:15 -06:00
Joel Dice
ebc54c234f
fix signedness error for wide iinc implementation
2010-09-23 08:50:09 -06:00
Joel Dice
b023d147df
fix JVM_Available for when fd is a fifo or socket
2010-09-23 08:49:36 -06:00
Joel Dice
89f6adc93c
fix various classloading deadlocks and races
2010-09-22 13:58:46 -06:00
Joel Dice
efd3ccb04f
set java.home to path of JRE, not JDK
2010-09-20 18:38:38 -06:00
Joel Dice
17f495eb27
rework OpenJDK build to derive classpath and library path from environment
...
We now consult the JAVA_HOME environment variable to determine where
to find the system library JARs and SOs. Ultimately, we'll want to
support self-contained build, but this allows Avian to behave like a
conventional libjvm.so.
2010-09-20 17:31:23 -06:00
Joel Dice
64e42da348
implement avian.Handler.ResourceInputStream.available
2010-09-17 16:11:04 -06:00
Joel Dice
93c9395f1d
comment-out debug logging
2010-09-17 16:10:26 -06:00
Joel Dice
a0a23b4692
implement JVM_Yield
2010-09-17 16:10:01 -06:00
Joel Dice
d0d53e2e10
fix custom-classloader-related concurrency problems and other bugs
...
The main changes in this commit ensure that we don't hold the global
class lock when doing class resolution using application-defined
classloaders. Such classloaders may do their own locking (in fact,
it's almost certain), making deadlock likely when mixed with VM-level
locking in various orders.
Other changes include a fix to avoid overflow when waiting for
extremely long intervals and a GC root stack mapping bug.
2010-09-16 20:49:02 -06:00
Joel Dice
f485016637
implement more JVM_* methods and avoid duplicate array class loading
2010-09-14 18:52:57 -06:00
Joel Dice
d819a75f36
more work towards OpenJDK classpath support
...
The biggest change in this commit is to split the system classloader
into two: one for boot classes (e.g. java.lang.*) and another for
application classes. This is necessary to make OpenJDK's security
checks happy.
The rest of the changes include bugfixes and additional JVM method
implementations in classpath-openjdk.cpp.
2010-09-14 10:49:41 -06:00
Joel Dice
561ee6dff9
add debug logging to finder.cpp
2010-09-13 20:38:55 -06:00
Joel Dice
66280458c8
implement more JVM_* methods
2010-09-10 17:47:23 -06:00
Joel Dice
ea2509666a
reverse operands when calling builtin isAssignableFrom
...
Our builtin function reverses the meanings of the operands relative to
the JNI method.
2010-09-10 17:45:52 -06:00
Joel Dice
64100d17c7
Merge branch 'master' of oss.readytalk.com:/var/local/git/avian into openjdk
2010-09-10 15:58:43 -06:00
Joel Dice
cddea7187d
preliminary support for using OpenJDK's class library
...
Whereas the GNU Classpath port used the strategy of patching Classpath
with core classes from Avian so as to minimize changes to the VM, this
port uses the opposite strategy: abstract and isolate
classpath-specific features in the VM similar to how we abstract away
platform-specific features in system.h. This allows us to use an
unmodified copy of OpenJDK's class library, including its core classes
and augmented by a few VM-specific classes in the "avian" package.
2010-09-10 15:05:29 -06:00
Joel Dice
d9e79db062
Merge branch 'master' into arm
2010-09-03 23:26:08 +01:00
jet
a1f5456451
All tests passing for ARM port in JIT mode.
2010-09-03 12:52:11 -06:00
Joel Dice
dd0a696932
handle logical AND with a constant in a single instruction where possible
2010-09-03 18:32:22 +01:00
Joel Dice
e7a48c0fa2
save return address in powerpc.cpp's MyAssembler::saveFrame
...
We've been getting away with not doing this so far since our Java
calling convention matches the native calling convention concerning
where the return address is saved, so when our thunk calls native code
it gets saved for us automatically. However, there was still the
danger that a thread would interrupt another thread after the stack
pointer was saved to the thread field but before the native code was
called and try to get a stack trace, at which point it would try to
find the return address relative to that stack pointer and find
garbage instead. This commit ensures that we save the return address
before saving the stack pointer to avoid such a situation.
2010-09-02 17:28:20 -06:00
Joel Dice
bd01784249
save return address in arm.cpp's MyAssembler::saveFrame
...
This is necessary to allow safe stack unwinding (e.g. for exception
handling and garbage collection) from native code.
2010-09-03 00:18:19 +01:00
jet
a20d7e028b
Longs.java test now progresses further before failure.
2010-09-02 16:09:01 -06:00
Joel Dice
17c1a552d5
break each Class, Field, and Method into separate classes
...
In order to facilitate making the VM compatible with multiple class
libraries, it's useful to separate the VM-specific representation of
these classes from the library implementations. This commit
introduces VMClass, VMField, and VMMethod for that purpose.
2010-09-01 10:13:52 -06:00
jet
b26dd4abf1
All but 6 tests are now passing in JIT mode on ARM.
2010-08-31 18:35:55 -06:00
Joel Dice
a4914daae4
remove unused functions from powerpc.cpp
2010-08-30 16:55:48 -06:00
jet
b6a839950f
Nine tests (including float and integer calculations) are now passing.
2010-08-30 16:13:10 -06:00
Joel Dice
56b59cef5c
use r6 instead of r0 in popFrameAndUpdateStackAndReturn
...
This avoids clobbering the return value.
2010-08-30 16:16:02 +01:00
jet
f740570ff6
Further debugging of ARM "Hello World!" JIT functionality.
2010-08-27 18:52:33 -06:00
jet
5c00cfac6f
Incomplete debugging of "Hello World!" on ARM.
2010-08-24 17:59:01 -06:00
Joel Dice
be1ba2ccf8
fix gnu build
2010-08-16 09:24:27 -06:00
Joel Dice
fca98df55b
fix process=interpret class initialization regression
...
A long time ago, I refactored the class initialization code in the VM,
but did not notice until today that it had caused the
process=interpret build to break on certain recursive initializations.
In particular, we were not always detecting when a thread recursively
tried to initialize a class it was already in the process of
initializing, leading to the mistaken assumption that another thread
was initializing it and that we should wait until it was done, in
which case we would wait forever.
This commit ensures that we always detect recursive initialization and
short-circuit it.
2010-08-04 18:27:54 -06:00
Joel Dice
ddc90ef76e
fix 64-bit left shifts with constant shifts greater than or equal to 32
...
The shiftLeftC function in powerpc.cpp was miscompiling such shifts,
leading to crashes due to illegal instructions and other weirdness due
to instructions that meant something completely different. This
commit fixes that and adds a test to Longs.java to make sure it stays
fixed.
2010-07-23 10:52:58 -06:00
Joel Dice
4034a219d0
do nothing in System.arraycopy if length <= 0
...
Previously, we risked segfaults by passing negative numbers to memcpy.
This commit also makes arraycopy throw an IndexOutOfBounds exception
instead of an ArrayStoreException if the specified offsets and lengths
would take us outside the bounds of one or both of the arrays, per the
Sun documentation.
2010-07-13 18:40:29 -06:00
jet
d9aac52b3d
First version; interpreted mode works and JIT mode compiles.
2010-07-12 14:18:36 -06:00
Joel Dice
1f8130f566
handle virtual thunk case in MyProcessor::getStackTrace
...
If we catch the target thread in a virtual thunk when getting its
stack trace, we must assume its Thread::stack field is garbage and use
the register values instead. Previously, we treated these thunks as
any other native code, leading to crashes when we tried to use the
garbage pointer.
2010-07-06 16:13:11 -06:00
Joel Dice
bf8eb52611
reduce CodeCapacity value to 16MB in bootimage.cpp
...
32MB was just slightly too large for PowerPC immediate call instructions
to span, and 16MB matches the JIT executable memory area we use in
compile.cpp.
2010-06-25 21:54:01 -06:00
Joel Dice
6d887ef34f
comment-out debug logging in powerpc.cpp
2010-06-25 21:51:32 -06:00
Joel Dice
d308ba93c7
fix tails=true bootimage=true build
...
compileDirectInvoke does some magic to optimize tail calls to native
methods which involves storing the return address (which we'll never
actually return to, since it's a tail call) in a thread-local field so
the thunk function can figure out which native method to look up at
runtime. Since this address will change when the boot image is
loaded, the boot image creation code needs to know about it.
2010-06-25 21:13:59 -06:00
Joel Dice
98b82a9bc1
fix callContinuation regression
...
callContinuation failed to call the correct continuation when feeding
it an exception due to a regression introduced with the
Thread.getStackTrace changes.
2010-06-25 09:51:35 -06:00
Joel Dice
74930d75e7
update PowerPC assembly Thread field offsets
...
The new Thread::defaultHeap declaration has increased the offset of all
the fields following it.
This commit also makes vmInvoke_returnAddress global so it can be refered
to from compile.cpp.
2010-06-24 19:35:07 -06:00
Joel Dice
2d6a179bf2
update assembly code field offsets to reflect new Thread field declaration
...
Thread::defaultHeap is now an inline array, which means the offsets of
all the fields following have increased.
2010-06-24 19:12:15 -06:00
Joel Dice
3e304521d0
initialize MyProcessor::callTableSize in constructor
...
This field was being used uninitialized, which could lead to an out of
memory condition when we tried to grow the call table to a ridiculous
size.
2010-06-24 19:09:50 -06:00
Joel Dice
3018290238
pre-allocate Thread::backupHeap for signal safety
...
It's not safe to use malloc from a signal handler, so we can't
allocate new memory when handling segfaults or Thread.getStackTrace
signals. Instead, we allocate a fixed-size backup heap for each
thread ahead of time and use it if there's no space left in the normal
heap pool. In the rare case that the backup heap isn't large enough,
we fall back to using a preallocated exception without a stack trace
as a last resort.
2010-06-19 16:40:21 -06:00
Joel Dice
7ea6036842
fix isThunkUnsafeStack
...
This function was broken in two different ways:
1. It only checked MyProcessor::thunks, not MyProcessor::bootThunks.
It needs to check both.
2. When checking MyProcessor::thunks, it used fields from
MyProcessor::bootThunks instead of from the same thunk collection.
This fixes both problems.
2010-06-16 20:29:41 -06:00
Joel Dice
ea797fd03c
fix windows build
2010-06-16 18:37:22 -06:00
Joel Dice
39a82a4006
update bootimage.cpp to reflect BootImage restructuring
2010-06-15 19:49:48 -06:00
Joel Dice
18d1c54956
fix typo in compile-x86.S
2010-06-15 19:47:06 -06:00
Joel Dice
9559aca825
fix Thread.getStackTrace race conditions
...
Implementing Thread.getStackTrace is tricky. A thread may interrupt
another thread at any time to grab a stack trace, including while the
latter is executing Java code, JNI code, helper thunks, VM code, or
while transitioning between any of these.
To create a stack trace we use several context fields associated with
the target thread, including snapshots of the instruction pointer,
stack pointer, and frame pointer. These fields must be current,
accurate, and consistent with each other in order to get a reliable
trace. Otherwise, we risk crashing the VM by trying to walk garbage
stack frames or by misinterpreting the size and/or content of
legitimate frames.
This commit addresses sensitive transition points such as entering the
helper thunks which bridge the transitions from Java to native code
(where we must save the stack and frame registers for use from native
code) and stack unwinding (where we must atomically update the thread
context fields to indicate which frame we are unwinding to). When
grabbing a trace for another thread, we determine what kind of code we
caught the thread executing in and use that information to choose the
thread context values with which to begin the trace. See
MyProcessor::getStackTrace::Visitor::visit for details.
In order to atomically update the thread context fields, we do the
following:
1. Create a temporary "transition" object to serve as a staging area
and populate it with the new field values.
2. Update a transition pointer in the thread object to point to the
object created above. As long as this pointer is non-null,
interrupting threads will use the context values in the staging
object instead of those in the thread object.
3. Update the fields in the thread object.
4. Clear the transition pointer in the thread object.
We use a memory barrier between each of these steps to ensure they are
made visible to other threads in program order. See
MyThread::doTransition for details.
2010-06-15 19:10:48 -06:00
Joel Dice
a31ae24005
Merge branch 'wip'
2010-05-03 16:32:40 -06:00
Eric Scharff
9909c0cec3
Fix Mac OS X specific path bug
...
In Mac OS X, if a path contains a space, the path of the main executable
will contain a special URL-encoded character (%20 in this case). This
probably happens when any non-ASCII character is provided.
The fix is to use CFURLCreateStringByReplacingPercentEscapes which
creates a path that the POSIX API likes better.
2010-04-26 10:24:53 -06:00
JET
3aac50555b
fixed ARM interpreted-mode regression
2010-04-20 15:51:35 -06:00
JET
1ea2a3a6dc
Merge branch 'wip' of oss.readytalk.com:/var/local/git/avian into wip
2010-04-20 10:04:47 -06:00
JET
c666ab58e3
Improved (should now be complete) Unicode support (UTF-8 for *nix and UTF-16 for Windows).
2010-04-20 10:03:07 -06:00
Joel Dice
e5fad03632
fix MSVC build rot
2010-04-15 11:11:10 -06:00
JET
34f51114a1
Merge branch 'master' into wip
2010-04-14 09:27:24 -06:00
JET
b2f5e71d22
ARM and UTF-8 work
2010-04-14 09:26:50 -06:00
Joel Dice
03ec9e6f19
Merge branch 'master' into wip
2010-04-14 09:22:42 -06:00
Joel Dice
3e5b2cbc7b
fix miscompilation of 64-bit volatile field reads and writes on x86_32
...
We were generating code which clobbered the data we were putting into
64-bit volatile fields (and potentially also clobbering the target or
source object in the case of non-static fields) due to misplaced
synchronization code. Reordering this code ensures that both the data
and the target or source survive across calls to synchronization
helper functions.
2010-03-01 18:24:25 -07:00
Joel Dice
c2a9424f91
implement compileTimeMemoryBarrier in arch.h
...
This has the same implementation as programOrderMemoryBarrier in
x86.h, but makes it available on all architectures.
2010-02-04 18:30:13 -07:00
Joel Dice
99bb7924b0
fix stack frame mapping code for exception handlers
...
Previously, the stack frame mapping code (responsible for statically
calculating the map of GC roots for a method's stack frame during JIT
compilation) would assume that the map of GC roots on entry to an
exception handler is the same as on entry to the "try" block which the
handler is attached to. Technically, this is true, but the algorithm
we use does not consider whether a local variable is still "live"
(i.e. will be read later) when calculating the map - only whether we
can expect to find a reference there via normal (non-exceptional)
control flow. This can backfire if, within a "try" block, the stack
location which held an object reference on entry to the block gets
overwritten with a non-reference (i.e. a primitive). If an exception
is later thrown from such a block, we might end up trying to treat
that non-reference as a reference during GC, which will crash the VM.
The ideal way to fix this is to calculate the true interval for which
each value is live and use that to produce the stack frame maps. This
would provide the added benefit of ensuring that the garbage collector
does not visit references which, although still present on the stack,
will not be used again.
However, this commit uses the less invasive strategy of ANDing
together the root maps at each GC point within a "try" block and using
the result as the map on entry to the corresponding exception
handler(s). This should give us safe, if not optimal, results. Later
on, we can refine it as described above.
2010-02-04 18:03:32 -07:00
Joel Dice
c9b9db1621
reimplement Java object monitors (second try)
...
See commit 8120bee4dc
for the original
problem description and solution. That commit and a couple of related
ones had to be reverted when we found they had introduced GC-safety
regressions leading to crashes.
This commit restores the reverted code and fixes the regressions.
2010-02-04 17:56:21 -07:00
Joel Dice
48834be209
revert recent commits to reimplement Java object monitors
...
We're seeing race conditions which occasionally lead to assertion
failures and thus crashes, so I'm reverting these changes for now:
29309fb414
e92674cb73
8120bee4dc
2010-02-04 08:18:39 -07:00
Joel Dice
29309fb414
update Thread field offsets to reflect recent additions
...
Every time we add or remove fields to Thread, we need to update the
assembly code to reflect the new offsets.
2010-02-02 12:26:09 -07:00
Joel Dice
e92674cb73
fix race condition in monitorWait
...
We don't want to check Thread::waiting until we have re-acquired the
monitor, since another thread might notify us between releasing
Thread::lock and acquiring the monitor.
2010-02-02 12:24:05 -07:00
Joel Dice
3bc37d6e2a
fix encoding of single byte register-to-memory moves on x86_64
...
We need to prefix instructions of the form "mov R,M" with a REX byte
when R is %spl, %bpl, %sil, or %dil. Such moves are unencodable on
32-bit x86, and, because of the order in which we pick registers,
pretty rare on 64-bit systems, which is why this took so long to
notice.
2010-02-02 11:37:08 -07:00
Joel Dice
8120bee4dc
reimplement Java object monitors to avoid running out of OS handles
...
Due to SWT's nasty habit of creating a new object monitor for every
task added to Display.asyncExec, we've found that, on Windows at
least, we tend to run out of OS handles due to the large number of
mutexes we create between garbage collections.
One way to address this might be to trigger a GC when either the
number of monitors created since the last GC exceeds a certain number
or when the total number of monitors in the VM reaches a certain
number. Both of these risk hurting performance, especially if they
force major collections which would otherwise be infrequent. Also,
it's hard to know what the values of such thresholds should be on a
given system.
Instead, we reimplement Java monitors using atomic compare-and-swap
(CAS) and thread-specific native locks for blocking in the case of
contention. This way, we can create an arbitrary number of monitors
without creating any new native locks. The total number of native
locks needed by the VM is bounded instead by the number of live
threads plus a small constant.
Note that if we ever add support for an architecture which does not
support CAS, we'll need to provide a fallback monitor implementation.
2010-02-01 18:40:47 -07:00
Joel Dice
45476eb591
fix handling of volatile longs and doubles on PowerPC
...
We were miscompiling methods which contained getfield, getstatic,
putfield, or putstatic instructions for volatile 64-bit primitives on
32-bit PowerPC due to not noticing that values in registers are clobbered
across function calls.
The solution is to create a separate Compiler::Operand instance for each
object monitor reference before and after the function call to avoid
confusing the compiler. To avoid duplicate entries in the constant pool,
we add code look for and, if found, reuse any existing entry for the same
constant.
2010-01-27 17:46:04 -07:00
jet
ea4b4bfcbf
Merge branch 'wip' of oss.readytalk.com:/var/local/git/avian into wip
2010-01-06 10:57:55 -07:00
Joel Dice
3686d2131d
fix jsr/ret code generation bug
...
We were generating code to marshal values into place prior to a jump,
but placing it after the jump instruction, which made it useless.
2010-01-04 17:17:16 -07:00
Joel Dice
20f92bbd05
specify java.home system property in GNU Classpath build
...
Currently, we just set this to /tmp (or the equivalent) since Avian
doesn't really have a home. This avoids a NullPointerException from
javax/xml/parsers/SAXParserFactory.
2010-01-04 17:14:00 -07:00
jet
8c8020811a
Merge branch 'wip' of oss.readytalk.com:/var/local/git/avian into wip
2009-12-28 11:14:26 -07:00
Joel Dice
664cb3cd39
don't try to parse annotation tables more than once; use defining classloader when loading array classes during linking
2009-12-24 17:58:48 -07:00
Joel Dice
805d1d13d8
mark system classloader initialized when using GNU Classpath to avoid security exceptions; only look for field in interfaces after looking in class and superclasses
2009-12-24 17:57:07 -07:00
Joel Dice
40c65f66bf
add (commented-out) debug logging to gnu.cpp
2009-12-24 17:54:02 -07:00
Joel Dice
7b2322e7f7
accept any source site in resolveTargetSites, whether it matches the next read or not
2009-12-24 17:47:58 -07:00
jet
77990b9489
Merge branch 'wip' of oss.readytalk.com:/var/local/git/avian into wip
2009-12-23 09:26:17 -07:00
Joel Dice
f588a62ae3
fix Classpath 0.98 compatibility issues
2009-12-22 21:34:04 -07:00
Joel Dice
30db38ebd6
replace calls to ExceptionOccurred with calls to ExceptionCheck
...
The latter is cheaper (avoids a state transition and possible memory
allocation) when we just want to know if an exception is thrown
without needing a handle to that exception.
2009-12-16 19:25:03 -07:00
Joel Dice
4c0ede8b9a
reuse JNI references when possible
...
Before allocating a new reference in NewGlobalReference or when
creating a local reference, we look for a previously-allocated
reference pointing to the same object. This is a linear search, but
usually the number of elements in the reference list is small, whereas
the memory, locking, and allocation overhead of creating duplicate
references can be large.
2009-12-16 19:16:51 -07:00
Joel Dice
7cf25a0fc3
fix process=interpret build
2009-12-14 18:01:28 -07:00
Joel Dice
d5f5c2351b
use _ReadWriteBarrier intrinsic for MSVC build
2009-12-12 18:50:59 -07:00
Joel Dice
2b4361c060
fix GNU Classpath build
2009-12-05 19:40:46 -07:00
Joel Dice
b6ac05ba9d
remove unecessary code from resolveSourceSites and resolveTargetSites
2009-12-05 15:49:53 -07:00
jent
4cf9e16897
Merge branch 'master' of oss.readytalk.com:/var/local/git/avian
2009-12-04 12:02:06 -07:00
jent
99a1c12682
Files to add Deflater and DeflaterOutputStream to java.util.zip for
...
avian
2009-12-04 12:01:31 -07:00
Joel Dice
0e4fabffb7
fix incorrect parameter to maybeRex call in sseMoveRR
2009-12-03 17:57:28 -07:00
Joel Dice
60333c88f5
fix continuations=true build for Windows x86_64
2009-12-03 12:46:29 -07:00
Joel Dice
7cdf63c045
fix continuations=true build for Darwin
2009-12-02 23:15:27 -07:00
Joel Dice
f0e66eea37
remove extra semicolon
2009-12-02 23:09:05 -07:00
Joel Dice
7a3bf85caf
fix bootimage=true build for Windows
2009-12-02 20:08:07 -07:00
Joel Dice
b218117881
fix continuations=true build for Cygwin
2009-12-02 19:37:22 -07:00
Joel Dice
8b11f0c271
fix continuations=true build for Windows
2009-12-02 19:29:57 -07:00
Joel Dice
6118792ffd
update copyright years
2009-12-02 19:08:29 -07:00
jet
e516f3ce1c
Merge branch 'wip' of oss.readytalk.com:/var/local/git/avian into wip
2009-12-02 13:45:21 -07:00
Joel Dice
3777c9b429
fix MSVC build
2009-12-02 08:49:10 -07:00
Joel Dice
5a0e00ca39
GC safety bugfix
2009-12-01 22:41:12 -07:00
Joel Dice
80d3a286d1
check bootThunkTable as well as thunkTable in MyProcessor::getStackTrace
...
We need to check to see if we caught the thread somewhere in the thunk
code (i.e. about to call a helper function), in which case the stack
and base pointers are valid and may be used to create an accurate
trace.
2009-12-01 18:17:33 -07:00
Joel Dice
168e206812
fix GCC 3.4 build
2009-12-01 17:33:30 -07:00
Joel Dice
f216fe37ff
fix regression which led to register exhaustion
2009-12-01 11:14:57 -07:00
Joel Dice
98275e175e
powerpc bugfixes
2009-12-01 09:21:33 -07:00
Joel Dice
9ba71cf508
fix Darwin build
2009-12-01 08:23:11 -07:00
Joel Dice
0bdf1d8e82
use thunks for floating point ops if SSE is not available
2009-11-30 22:02:26 -07:00
Joel Dice
175cb8e89b
more floating point bugfixes
2009-12-01 02:06:01 +00:00
Joel Dice
7fa10909f4
more bugfixes for handling 64-bit floats on 32-bit systems
2009-11-30 22:08:59 +00:00
jet
69c9bf5ff9
Merge branch 'wip' of oss.readytalk.com:/var/local/git/avian into wip
2009-11-30 14:00:51 -07:00
Joel Dice
851187f0ce
refine memory barrier implementation and usage
2009-11-30 15:38:16 +00:00
Joel Dice
04454960ec
various bugfixes for handling 64-bit floating point values on 32-bit systems
2009-11-30 15:10:34 +00:00
Joel Dice
d9de4c607c
allow source operand of any type for move operations
2009-11-30 15:09:43 +00:00
Joel Dice
ec701b9994
whitespace tweaks
2009-11-30 15:08:45 +00:00
Joel Dice
79d281f7fa
encourage loads from memory directly into SSE registers where appropriate
2009-11-30 02:17:08 +00:00
Joel Dice
1c61c1f421
fix x86 memoryBarrier implementation
2009-11-29 16:53:46 -07:00
Joel Dice
0b09c6aa30
avoid busy wait when entering "exclusive" state
2009-11-29 16:53:05 -07:00
Joel Dice
6d9e1270ca
fix race conditions in atomic operations
2009-11-29 09:08:07 -07:00
Joel Dice
1558b85acf
second attempt to fix "idle to active" fast path
...
If another thread succeeds in entering the "exclusive" state while we
use the fast path to transition the current thread to "active", we
must switch back to "idle" temporarily to allow the exclusive thread a
chance to continue, and then retry the transition to "active" via the
slow path.
2009-11-28 15:35:15 -07:00
Joel Dice
3418a8bcbe
fix race condition introduced in previous commit
2009-11-28 15:24:02 -07:00
Joel Dice
75934c8342
provide fast paths for common thread state transitions
...
These paths reduce contention among threads by using atomic operations
and memory barriers instead of mutexes where possible. This is
especially important for JNI calls, since each such call involves two
state transitions: from "active" to "idle" and back.
2009-11-28 15:01:54 -07:00
Joel Dice
f5490b800a
Merge branch 'master' of oss.readytalk.com:/var/local/git/avian
2009-11-28 11:18:13 -07:00
Joel Dice
c615db31fb
refine move cost calculation to avoid indirect moves (e.g. memory to memory)
2009-11-28 18:17:17 +00:00
Joel Dice
5ead8fab17
refactor code responsible for moving data in the compiler
...
This is partially to address incorrect code generation for 64-bit
floating-point values on x86_32 and partially to reduce unnecessary
moves.
2009-11-27 21:15:12 -07:00
Joel Dice
bd72745ff9
fix off-by-one error in intrinsic()
2009-11-27 21:01:27 -07:00
Joel Dice
f6a52e260b
specify CONTEXT::ContextFlags before calling GetThreadContext
...
Previously, we assumed that the "context" parameter to
GetThreadContext was only an output parameter, but it actually uses at
the value of CONTEXT::ContextFlags on entry to decide what parts of
the structure to fill in. We were getting lucking most of the time,
because whatever garbage was on the stack at that location had the
necessary bits set. When we weren't so lucky, we got all zeros for
the register values which sometimes lead to a crash depending on the
state of the thread being examined.
2009-11-24 19:16:22 -07:00
Joel Dice
9f14d63592
initialize MyProcessor::getStackTrace::Visitor::trace in case visit is never called
2009-11-24 19:15:27 -07:00
Stan
728a6ba706
use MapViewOfFile instead of mmap on Windows
2009-11-24 08:24:37 -07:00
jet
993d210232
Merge branch 'wip' of oss.readytalk.com:/var/local/git/avian into wip
2009-11-23 10:04:16 -07:00
Joel Dice
a0d763d871
use cmpxchgq for 64-bit operands in atomicCompareAndSwap
2009-11-20 15:17:35 -07:00
Joel Dice
2276eece0e
support atomicCompareAndSwap on powerpc for GCC versions prior to 4.1
2009-11-20 15:14:27 -07:00
Joel Dice
b83314e884
fix powerpc build
2009-11-20 10:42:02 -07:00
Joel Dice
15eada93ed
implement atomicCompareAndSwap on x86_32 for GCC versions prior to 4.1 and for MSVC
2009-11-20 10:40:01 -07:00
Joel Dice
e91157a390
avoid acquiring a mutex recursively in markDirty
2009-11-19 19:41:49 -07:00
Joel Dice
5f5cc57d12
only use atomic operations if the compiler supports them
2009-11-19 19:32:54 -07:00
Joel Dice
fdde34694c
use atomic operations in MyHeap::mark to avoid need for mutex
2009-11-19 18:13:00 -07:00
Joel Dice
c711ac5701
return null from NewString[UTF] if the char* parameter is null
2009-11-18 11:01:47 -07:00
jet
2f54eb5e55
Merge branch 'wip' of oss.readytalk.com:/var/local/git/avian into wip
2009-11-05 11:16:58 -07:00
Joel Dice
5b8a7ca566
temporarily disable use of SSE on 32-bit systems until a bug involving memory<->SSE-register moves is fixed
2009-11-04 15:16:06 +00:00
Joel Dice
fb5796b740
don't use SSE for long-to-double conversion on 32-bit systems
2009-11-04 00:02:38 +00:00
Joel Dice
82d2be8e71
implement JavaVM::AttachCurrentThreadAsDaemon
2009-11-03 14:52:14 -07:00
Joel Dice
4566e7a7dd
avoid infinite loop in deadWord
2009-11-03 14:14:27 -07:00
jet
ad379e1b20
Merge branch 'wip' of oss.readytalk.com:/var/local/git/avian into wip
2009-11-03 11:50:21 -07:00
Joel Dice
ed4206b06d
fix order-of-operations bug in compile loop
...
The code was capturing branch snapshots too early - before the call to
populateSources which might perform further moves.
2009-11-02 21:11:39 -07:00
jet
50dae3067d
modified binaryToObject to support ARM
2009-10-30 15:04:15 -06:00
Joel Dice
e825da60aa
update continuation constants to reflect new field offsets
2009-10-30 00:45:46 +00:00
jet
d901653979
Merge branch 'master' into wip
...
Conflicts:
src/compile.cpp
2009-10-29 14:23:20 -06:00
jet
d3d228e69b
moduloInt + arm work
2009-10-29 14:14:44 -06:00
jet
e00fc5d91a
ARM port work
2009-10-29 10:12:30 -06:00
Joel Dice
3c893b2ee3
Merge commit 'origin/master' into wip
2009-10-27 10:36:19 -06:00
Joel Dice
1fd00dd55d
revert all __attribute__ ((externally_visible)) changes because it's not clear yet how to detect whether it's supported
2009-10-27 10:35:26 -06:00
Joel Dice
e3b21e80ba
Merge commit 'origin/master' into wip
2009-10-27 09:41:20 -06:00
Joel Dice
f57d80f1b7
ammend recent commit to avoid using __attribute__ ((externally_visible)) when it is not available (second try)
2009-10-27 09:41:00 -06:00
Joel Dice
8bf3487ff1
Merge commit 'origin/master' into wip
2009-10-27 09:35:13 -06:00
Joel Dice
51fcf1ef74
ammend recent commit to avoid using __attribute__ ((externally_visible)) when it is not available
2009-10-27 09:34:46 -06:00
Joel Dice
2efff818ea
Merge commit 'origin/master' into wip
2009-10-27 09:17:54 -06:00
Joel Dice
4570b86da0
add __attribute__ ((externally_visible)) to EXPORT macros to facilitate whole-program optimization using GCC 4.5
2009-10-27 09:16:08 -06:00
Joel Dice
c8d5c1faed
visit all frame locations in resolveOriginalSites
...
Previously, we only visited frame locations containing values, but
this invited the possibility of reusing the same site for two
locations in some cases.
2009-10-26 17:59:20 -06:00
Joel Dice
3b4be3decd
defer to helper thunk for frem and drem
2009-10-24 19:29:20 -06:00
Joel Dice
95c3f37bfb
fix various bugs involving doubles on 32-bit systems
2009-10-24 17:18:56 -06:00
Joel Dice
064ad572bc
use truncation, not rounding in float2Int instructions
2009-10-20 15:43:24 -06:00
Joel Dice
f27ecaa199
fix memcpy argument order in Avian_avian_Singleton_getLong
2009-10-20 13:38:05 -06:00
Joel Dice
e06f0407cb
fix powerpc bootimage build (second try)
2009-10-20 09:06:52 -06:00
Joel Dice
c044781807
fix powerpc bootimage build
2009-10-20 08:20:49 -06:00
Joel Dice
984f3106fd
fix powerpc build
2009-10-19 10:31:34 -06:00
Joel Dice
1a63b72b41
clean up float-vs.-int tracking in constant pools
2009-10-17 20:11:03 -06:00
Joel Dice
15020d77a6
refactor intrinsic support
...
This ensures that the low-level, architecture specific code need not
be aware of the semantics and names of Java methods.
2009-10-17 19:26:14 -06:00
Joel Dice
f702795178
fix integer truncation bug
2009-10-17 18:35:19 -06:00
Joel Dice
cec6444911
fix bootimage build for case where the JIT code area is too far from the AOT code area to do immediate-offset jumps between them
2009-10-17 18:18:03 -06:00
Joel Dice
963bfb3e3f
avoid array bounds warnings from GCC 4.3
...
These warnings are due to GCC being smart enough to do interprocedural
constant propagation but not smart enough to avoid false positives in
all cases when looking for array bounds errors.
2009-10-17 18:09:54 -06:00
Joel Dice
7b0378c180
support darwin/x86_64
2009-10-14 10:01:37 -06:00
Joel Dice
ef4a8430ad
add binaryToObject utility
...
We use this utility instead of objcopy to embed data into object files
because it offers more control over e.g. section alignment, which is
important for bootimage builds.
2009-10-13 19:00:16 -06:00
Joel Dice
87950e86b8
add missing parameter to native SystemClassLoader methods
2009-10-13 18:42:49 -06:00
Joel Dice
9fcdfaf7ff
implement binaryToElf utility and use it instead of objcopy on Linux
...
This is necessary because objcopy does not currently allow us to
specify the alignment requirement for the .boot section used to store
the boot image for AOT builds. This may be a problem for Windows as
well, in which case we'll need to add a binaryToPE utility.
2009-10-11 16:09:23 -06:00
Joel Dice
c65b106112
whitespace tweak in binaryToMacho.cpp
2009-10-11 16:06:09 -06:00
Joel Dice
b878b84d32
set DebugCompile to false in compile.cpp
2009-10-11 16:05:37 -06:00
Joel Dice
b4c1c6badf
fix process=interpret build
2009-10-10 18:23:14 -06:00
Joel Dice
44a6620aa1
disable use of SSE when compiling ahead-of-time
2009-10-10 17:46:43 -06:00
Joel Dice
38bf29300f
enable SSE<->GPR moves when size matches word size
2009-10-10 22:27:35 +00:00
Joel Dice
78d9e51b7e
replace hasMoreThanOneSite with uniqueSite; rename Value fields
...
uniqueSite also checks, if applicable, to see if the second word of a
value shares the specified site with the first value as its sole site.
Also renamed a couple of fields in Value for clarity.
2009-10-10 16:07:30 -06:00
Joel Dice
622b3d1c4e
replace compare and branch instructions with combined versions
...
This allows the assembler to see the operand types of the comparison
and the condition for jumping in the same operation, which is
essential for generating efficient code in cases such as
multiple-precision compare-and-branch.
2009-10-10 15:03:23 -06:00
Joel Dice
609a1a9633
snapshot
2009-10-07 00:50:32 +00:00
Joel Dice
23197da679
fix handling of subroutines in methods of return type long on 32-bit systems
2009-10-06 03:17:12 +00:00
Joel Dice
4f78783ef1
various bugfixes for SSE-based floating-point support
2009-10-05 14:25:12 +00:00
Joel Dice
d25da6116a
snapshot
2009-10-04 22:10:36 +00:00
Joel Dice
5dad9bddd6
snapshot
2009-10-04 19:56:48 +00:00
Joel Dice
6cef085d7e
snapshot
2009-09-26 19:43:44 +00:00
Joel Dice
325f93b4d1
Merge branch 'master' into wip
...
Conflicts:
src/compile.cpp
src/compiler.cpp
src/machine.h
src/x86.cpp
2009-09-20 15:43:32 -06:00
Joel Dice
953cb69e5e
move proxy and annotation code from C++ to Java
...
This allows code shrinkers to remove it if it's not used by the application.
2009-09-19 16:21:15 -06:00
Joel Dice
1a2eb3836c
Merge branch 'master' of oss.readytalk.com:/var/local/git/avian
2009-09-18 18:01:57 -06:00
Joel Dice
7aa906d97b
support runtime-visible annotations and java.lang.reflect.Proxy
2009-09-18 18:01:54 -06:00
Joel Dice
d0f8889e27
fix GC safety bugs in parseMethodTable and makeArrayClass
2009-09-18 12:20:35 -06:00
Joel Dice
b645c284b5
fix memory leak in debug build
2009-09-17 21:36:52 -06:00
Joel Dice
fcc4ff93e0
remove debug logging
2009-09-17 21:22:47 -06:00
Joel Dice
1dfa421a6c
fix argument mixup in Runtime.exit
2009-09-17 18:28:42 -06:00
Joel Dice
bf2b17cfa6
fix misspelled comment
2009-09-04 17:08:45 -06:00
Joel Dice
b0ba70866e
fix incorrect line numbers in NPE traces
2009-09-04 15:09:40 -06:00
Joel Dice
e47c149fb1
fix misuse of FindFirstFile
2009-09-03 17:57:32 -06:00
Joel Dice
6519047342
fix bootimage build
2009-09-03 09:06:04 -06:00
Joel Dice
84ac2e417d
follow reference pointer before using in in refrenceTargetUnreachable in case it points to a moved object
2009-09-01 18:32:21 -06:00
Joel Dice
6aff383ee1
ensure Heap::needsMark and Heap::mark work correctly during GC
2009-09-01 18:31:18 -06:00
Joel Dice
4f794f533e
fix handling of reachable, moved weak references in postVisit
2009-09-01 17:23:30 -06:00
Joel Dice
49005f0746
fix name-clash regression in heapdump.cpp
2009-09-01 13:09:53 -06:00
Joel Dice
27f35bf239
fix heapdump build
2009-09-01 12:15:33 -06:00
Joel Dice
73dc058c14
implement StackTraceElement.getFileName properly
2009-08-27 16:28:44 -06:00
Joel Dice
1a0eef7e2d
add support for building with MSVC on Windows
2009-08-26 18:26:44 -06:00
Joel Dice
4297fa04b3
run java finalizers in a separate thread to guarantee no application locks are held when doing so
2009-08-24 17:51:31 -06:00
Joel Dice
4536f13ee4
superficial reformatting of previous commit
2009-08-21 09:44:18 -06:00
Joel Dice
637a676fb0
fix MinGW 3.4 build
2009-08-21 09:37:49 -06:00
Joel Dice
a56c1d8765
fix GC-safety bug in resolveSpec
2009-08-20 12:37:03 -06:00
Joel Dice
6196f61938
clear Thread::javaThread before entering zombie state, since clearing it in Thread::dispose is too late - the reference may already be invalid since we don't visit GC roots for zombie threads
2009-08-20 08:49:01 -06:00
Joel Dice
c4b5ecec90
implement Runtime.addShutdownHook and Thread.setDaemon; avoid segfaults due to an application calling e.g. CallStaticBooleanMethod when it really meant CallStaticVoidMethod
2009-08-19 14:27:03 -06:00
Joel Dice
df3baeb83b
handle null value properly in SetObjectArrayElement
2009-08-19 07:36:52 -06:00
Joel Dice
0a2e611baa
handle case of null thread local in SegFaultHandler::handleSignal
2009-08-18 15:47:08 -06:00
Joel Dice
0eba1eeaf2
leave thread in JoinedState instead of ZombieState in DetachCurrentThread
2009-08-18 15:29:25 -06:00
Joel Dice
01dcb1661b
don't resolve all constant pool entries in linkClass - just the field and method specs
2009-08-18 15:27:21 -06:00
Joel Dice
6449c8275a
fix process=interpret build
2009-08-18 14:41:21 -06:00
Joel Dice
c4edabdc02
implement ClassLoader.resolveClass and ensure class is linked in e.g. Class.getMethods; minor bugfixes
2009-08-18 14:26:28 -06:00
Joel Dice
dae0842c95
Merge branch 'master' of oss.readytalk.com:/var/local/git/avian
2009-08-17 13:10:36 -06:00
Joel Dice
062f6968a1
only emit a crash dump for access violations
2009-08-14 15:58:19 -06:00
Joel Dice
7fcbf9d85c
fix reading 2-byte UTF-8 constants
2009-08-14 08:52:31 -06:00
Joel Dice
3facd3f735
treat SoftReferences as WeakReferences; do vtable or interface table lookups as necessary in MyProcessor::invoke; various bugfixes
2009-08-13 09:17:05 -06:00
Joel Dice
b3a5823536
set JNIEnvVTable::NewWeakGlobalRef to NewGlobalRef since we don't yet have a weak version
2009-08-13 09:07:05 -06:00
Joel Dice
99e5e65bd8
implement sun.misc.Unsafe methods; set gnu.cpu.endian property
2009-08-13 09:05:37 -06:00
Joel Dice
42622d0d25
Merge branch 'master' of oss.readytalk.com:/var/local/git/avian
2009-08-12 19:41:05 -06:00
Joel Dice
bf48f1e297
set java.version property in Avian_gnu_classpath_VMSystemProperties_preInit; add empty Avian_java_lang_VMClassLoader_resolveClass implementation
2009-08-12 19:37:29 -06:00
Joel Dice
61cb8b3deb
handle zero-length lookup tables in lookupswitch
2009-08-12 19:32:12 -06:00
Joel Dice
bc884b4669
Merge branch 'master' of oss.readytalk.com:/var/local/git/avian
2009-08-11 18:50:04 -06:00
Joel Dice
22ae42b712
look for a native method implementation using the fast calling convention (Avian_*) before one using the standard convention (Java_*) to avoid false positives late in the search path
2009-08-11 18:49:58 -06:00
Josh warner
78ea4d20e3
added loneMatch to improve register allocation
2009-08-11 13:46:51 -06:00
Josh warner
f29199a285
fixed several operand type errors that appeared on 64-bit platforms
2009-08-11 13:30:31 -06:00
Josh warner
711680a183
fixed powerpc compile errors
2009-08-11 13:29:00 -06:00
Josh warner
cd59222f53
fixed propegation of result sizes
2009-08-11 13:27:25 -06:00
Josh warner
32167168f8
fixed incorrect opSize bug for 64-bit platforms
2009-08-11 13:25:22 -06:00
Joel Dice
535a152e86
Merge branch 'master' of ../avian-old
2009-08-11 12:42:14 -06:00
Joel Dice
935329d7cf
fix 32-bit shift case in unsignedShiftRightC
2009-08-11 12:36:25 -06:00
Joel Dice
db58097165
re-enable finalization
2009-08-11 10:04:41 -06:00
Joel Dice
24abc8acfe
Merge branch 'master' of ../avian
2009-08-11 09:43:29 -06:00
Joel Dice
83b0a217e0
disable debug trap
2009-08-11 09:40:54 -06:00
Joel Dice
a8b333fdc6
define LD and LX unconditionally for __x86_64__ since they should be the same for Windows and POSIX
2009-08-11 09:31:00 -06:00
Joel Dice
8ac06d8a47
initialize classloader map if necessary in Avian_java_lang_ClassLoader_defineClass
2009-08-11 09:25:35 -06:00
Joel Dice
336e822ba9
remove debug logging
2009-08-11 09:23:38 -06:00
Joel Dice
b1014b24f9
specify java.specification.version in Avian_gnu_classpath_VMSystemProperties_preInit
2009-08-11 09:21:26 -06:00
Joel Dice
fb5b0570c3
replace slashes with dots in class name before passing it to ClassLoader.loadClass
2009-08-11 09:20:49 -06:00
Joel Dice
28b5c46a0b
fix GC safety bug in makeNewGeneral
2009-08-10 17:35:44 -06:00
Josh warner
af4d82ef7e
Merge branch 'master' of git://oss.readytalk.com/avian
2009-08-10 13:42:57 -06:00
Josh warner
9910e310cb
fixed register reserve logic in pickTarget
2009-08-10 13:42:37 -06:00
Josh warner
1d3ef1fc43
Merge branch 'master' of git://oss.readytalk.com/avian, fixed problems that occured in broader testing
...
Conflicts:
src/compile.cpp
src/compiler.cpp
src/powerpc.cpp
src/x86.S
src/x86.cpp
2009-08-10 13:20:23 -06:00
Joel Dice
001000364d
add classloader parameter to functions which may directly or indirectly load classes; include methods inherited from interfaces (but not explicitly declared) in method tables and virtual tables of abstract classes
2009-08-10 07:56:16 -06:00
Joel Dice
54bb64cfb2
freeze sites for dead values in resolveOriginalSites
...
Previously, we simply removed the element from the sites array, but
this led to problems when the junction sites are shared among multiple
junctions such that the value at a given index is live at one junction
and dead at another.
2009-08-10 07:51:19 -06:00
Joel Dice
1a2deff97d
Merge branch 'master' of oss.readytalk.com:/var/local/git/avian
2009-08-09 14:43:53 -06:00
Joel Dice
2f864ebea5
fix LLD definition for MinGW 4.4
2009-08-07 16:28:47 -06:00
Joel Dice
2da6980eb5
print intptr_t's as pointers in compareIpToMethodBounds to avoid printf compatibility issues
2009-08-07 16:27:24 -06:00
Joel Dice
012d548bbb
fix sign extension from int to long on x86_64
2009-08-07 14:48:30 -06:00
jet
1ffe46a545
added ARM interpreted mode supported
2009-08-06 11:52:36 -06:00
Josh warner
f8bbc609e8
corrected debug messages
2009-08-06 10:32:00 -06:00
Josh warner
a2e639a2d2
added floating point support, split plan function
2009-08-06 10:26:22 -06:00
Josh warner
61bc729974
added floating point support, split plan method
2009-08-06 10:17:48 -06:00
Josh warner
53c0656ee7
added floating point support, split plan method
2009-08-06 10:14:31 -06:00
Josh warner
7483fa154d
added floating point support, instrinsics support
2009-08-06 10:01:57 -06:00
Josh warner
c3a389429e
split source function, update interface for floating point / instrinsic support
2009-08-06 08:54:23 -06:00
Josh warner
c042354ea0
added detectFeature function, used to detect sse in x86.cpp
2009-08-06 08:49:26 -06:00
Josh warner
5cc605b56d
added floating point support.
2009-08-06 08:48:15 -06:00
Josh warner
c7a1a7af77
added floating point support, split plan function.
2009-08-06 08:44:15 -06:00
Joel Dice
0c36b7b3b6
change popDouble return type to double
2009-08-05 15:00:27 -06:00
Joel Dice
63fa0668ff
avoid poor performance due to deeply-nested branches in MultiRead::intersect
2009-08-04 18:28:34 -06:00
Joel Dice
e9ee4a618c
implement Avian_java_lang_VMClassLoader_defineClass
2009-08-04 18:27:04 -06:00
Joel Dice
d5f4811b43
check for exception after calling resolveClass in parseInterfaceTable
2009-08-04 08:50:04 -06:00
Joel Dice
f8bf83bfec
fix recent regression in findInHierarchy
2009-08-04 08:42:16 -06:00
Joel Dice
aa6e3048b3
set os.arch property in Avian_gnu_classpath_VMSystemProperties_preInit
2009-08-03 16:18:41 -06:00
Joel Dice
9f2abd5d8a
fix out-of-date JNI method implementations to reflect newer static field table layout
2009-08-03 16:18:16 -06:00
Joel Dice
cb563f76e1
check superinterfaces when looking up methods and fields
2009-08-03 16:16:41 -06:00
Joel Dice
4ae3a1267a
remove unused method
2009-08-03 16:16:01 -06:00
Joel Dice
c3a8ca505c
avoid function pointer cast warning from GCC 3.4
2009-08-03 10:56:43 -06:00
Joel Dice
ad0592df6f
print class name properly when throwing NoSuchMethodError
2009-07-29 10:32:16 -06:00
Joel Dice
7060a5d4f0
clear Machine::byteArrayMap before generating boot image since it will not be used when the image is loaded
2009-07-28 17:22:07 -06:00
Joel Dice
1b8777aa6b
free correct object in Context::dispose
2009-07-28 17:20:23 -06:00
Joel Dice
7b183e8f4e
don't run Java finalizers when exiting the VM
2009-07-28 16:58:01 -06:00
Joel Dice
14e73560bb
fix order of operations in vmJump
2009-07-27 18:09:25 -06:00
Joel Dice
ad66ae2691
disable debug logging
2009-07-27 18:09:12 -06:00
Joel Dice
0447d9bed3
use __MINGW32__ instead of __WINDOWS__ in x86.cpp and assume Linux if it's not defined
2009-07-27 07:49:54 -06:00
Joel Dice
27d863790c
Merge branch 'win64' into gnu
...
Conflicts:
makefile
src/compile-x86.S
src/x86.S
src/x86.cpp
2009-07-25 20:48:36 -06:00
Joel Dice
f869e5be21
Merge branch 'master' into gnu
...
Conflicts:
classpath/java/util/TreeSet.java
2009-07-25 18:38:57 -06:00
Joel Dice
d3a249a3fa
Merge branch 'master' of oss.readytalk.com:/var/local/git/avian
2009-07-25 18:36:27 -06:00
Joel Dice
08e9a99cb5
don't abort if pthread_kill fails in MySystem::visit
2009-07-24 19:03:33 -06:00
Joel Dice
cc3289d88a
call pthread_kill unconditionally in Thread::interrupt() to ensure system calls such as epoll_wait are interrupted
2009-07-23 16:17:52 -06:00
Joel Dice
77f1bddce2
Revert "add avian.commit system property"
...
This reverts commit ed5be83467
.
2009-07-22 10:45:38 -06:00
Joel Dice
ed5be83467
add avian.commit system property
2009-07-22 10:38:32 -06:00
Joel Dice
3787985b25
implement basic finalization support
...
This implementation does not conform to the Java standard in that
finalize methods are called from whichever thread happens to be garbage
collecting, and that thread may hold locks, whereas the standard
guarantees that finalize will be run from a thread which holds no locks.
Also, an object will never be finalized more than once, even if its
finalize method "rescues" (i.e. makes reachable) the object such that it
might become unreachable a second time and thus a candidate for
finalization once more. It's not clear to me from the standard if this
is OK or not.
Nonwithstanding the above, this implementation is useful for "normal"
finalize methods which simply release resources associated with an
object.
2009-07-21 18:57:55 -06:00
Joel Dice
afdab27e02
backport GC safety fixes from gnu branch
2009-07-20 14:32:25 -06:00
Joel Dice
514d0bf7e5
fix deadlocks and other misbehaviors in class initialization code
2009-07-20 14:12:38 -06:00
Joel Dice
9975a556fa
implement VMRuntime.exit
2009-07-20 14:11:41 -06:00
Joel Dice
138f8444df
Merge branch 'master' into gnu
2009-07-20 08:27:33 -06:00
Joel Dice
8662361f71
Merge branch 'master' of oss.readytalk.com:/var/local/git/avian
2009-07-20 08:27:17 -06:00
Joel Dice
d12b441aa1
restore state from subroutine after jsr to avoid later confusion determining basic block boundaries
2009-07-20 08:26:01 -06:00
Joel Dice
47ab980550
fix thread heap overflow corner case in allocate3
...
The previous code relied on the invalid assumption that the thread-local
heaps for all threads would have been cleared immediately following a
garbage collection. However, the last thing the garbage collection
function does is run finalizers which may allocate new objects. This
can lead allocate3 to call allocateSmall with a size which is too large
to accomodate, overflowing the heap.
The solution is to iterate until there really is enough room for the
original allocation request.
2009-07-17 19:37:46 -06:00
Joel Dice
3e4336eba4
rearrange finalization code in collect to avoid inifinite recursion when finalizer allocates memory
2009-07-17 09:29:24 -06:00
Joel Dice
9c9eb86b2f
fix deadlock in allocate3 when another thread wants to enter the exclusive state
2009-07-16 11:51:35 -06:00
Joel Dice
5f6f8039e6
various bugfixes in subroutine stack mapping code
2009-07-13 17:49:15 -06:00
Joel Dice
e72ff8db0b
Merge branch 'master' into gnu
...
Conflicts:
src/compile.cpp
2009-07-11 12:11:59 -06:00
Joel Dice
ab5ba9c954
Merge branch 'master' of oss.readytalk.com:/var/local/git/avian
2009-07-10 09:57:29 -06:00
Joel Dice
30c7107aa3
enable DebugAllocation in heap.cpp when NDEBUG is not defined
2009-07-10 08:42:56 -06:00
Joel Dice
22852dcffa
fix GC safety bug when walking stack
2009-07-10 08:33:38 -06:00
Joel Dice
c22b4b4e79
various subroutine handling bugfixes
2009-07-08 08:18:40 -06:00
Joel Dice
dae7b68d5c
avoid indexing past the end of the array in makeSimpleFrameMapTable
2009-06-30 17:35:28 -06:00
Joel Dice
562e1e10a8
fix regression in MyCompiler::startLogicalIp
2009-06-30 17:33:54 -06:00
Joel Dice
b308354a3a
handle subroutines properly when generating frame maps (initial sketch)
2009-06-26 15:36:04 -06:00
Eric Scharff
f4347dee70
Implement dummy JNI GetVersion
2009-06-22 16:25:13 -06:00
Joel Dice
7ed14948b9
re-initialize frame maps for exception handlers on every iteration of the frame map calculation loop
...
This fixes incorrect frame map calcuation which may lead to crashes
during garbage collection from an exception handler.
2009-06-16 13:41:31 -06:00
Joel Dice
a21f951e29
consider an instruction reachable if it has no predecessors (i.e. it's the first instruction
2009-06-12 09:45:29 -06:00
Joel Dice
31976f585a
add DebugAllocation option to heap.cpp to help detect allocation and deallocation errors
2009-06-11 17:23:02 -06:00
Joel Dice
e1c7504eda
attempt to flush the compile log (if any) before crashing in SegFaultHandler::handle
2009-06-11 17:14:54 -06:00
Joel Dice
525318dabb
fix GC safety bug in builtin.cpp
2009-06-11 17:13:25 -06:00
Joel Dice
1d58541c87
generate full memory dump on unhandled exception in windows.cpp
2009-06-11 13:41:13 -06:00
Josh warner
f773c9e610
fixed xul deadlock bug on linux
2009-06-11 09:52:13 -06:00
Josh warner
6bca8fcefc
added support for windows-x86_64
2009-06-11 09:48:27 -06:00
Josh warner
16fee943e6
added debugging method 'vmAddressFromLine'
2009-06-11 09:45:35 -06:00
Josh warner
9681a8a1ff
added debugging method 'vmAddressFromLine'
2009-06-11 09:44:37 -06:00
Josh warner
862c37f9ad
added support for windows-x86_64, changed exception handling to use vectored exception handling on 64 bit windows
2009-06-11 09:43:04 -06:00
Josh warner
73fa0e0b0d
added support for windows-x86_64
2009-06-11 09:42:07 -06:00
Josh warner
53da167116
refactored code, added support for upper 8 registers on x86-64 and windows-x86_64
2009-06-11 09:40:50 -06:00
Josh warner
ad33a7800f
changed dynamicCall definition for 64 bit windows
2009-06-11 09:39:46 -06:00
Josh warner
788e34936c
fixed 64-bit windows printf formatters
2009-06-11 09:38:20 -06:00
Joel Dice
f239424930
implement NewDirectByteBuffer etc. properly when building against Classpath; call JNI_OnLoad if found in newly-loaded libraries
2009-06-10 18:15:00 -06:00
Joel Dice
20ea82ec2e
various tweaks for Classpath compatibility
2009-06-06 20:32:44 -06:00
Joel Dice
c1ca653fef
intern CONSTANT_Utf8 pool entries to save memory and reduce bootimage size
2009-06-06 18:26:23 -06:00
Joel Dice
9cf0a42210
respect string offset in stringCharAt
2009-06-06 16:36:07 -06:00
Joel Dice
ac34bc072c
remove obsolete todo comments
2009-06-06 14:58:06 -06:00
Joel Dice
6efeee49f8
include native Classpath code in libavian.a and the avian executable
2009-06-06 14:18:33 -06:00
Joel Dice
0857f53651
more progress on GNU Classpath compatibility
2009-06-04 17:21:42 -06:00
Joel Dice
4a87d82d8e
fix GC safety bug in MyProcessor::initVtable
2009-06-04 17:20:55 -06:00
Joel Dice
db09adc0d4
allow copies between object arrays of different types in System.arraycopy
2009-06-04 17:19:48 -06:00
Joel Dice
98be5c509e
more progress towards GNU Classpath compatibility
2009-06-03 16:17:55 -06:00
Joel Dice
0f6dbe35a7
add build option for using GNU Classpath
2009-06-02 18:55:49 -06:00
Joel Dice
ba5105c374
throw NoSuchMethodError in resolveMethod if method not found
2009-06-02 18:55:12 -06:00
Joel Dice
a4d4db8eb4
fix cygwin/msys bootimage build
2009-06-01 12:12:29 -06:00
Joel Dice
11e61543a3
fix bootimage build
2009-05-31 21:16:58 -06:00
Joel Dice
049f96bd1c
Merge branch 'master' into fun
2009-05-31 17:25:34 -06:00
Joel Dice
c434f211e2
fix return type for Avian_java_lang_Object_hashCode
2009-05-31 17:19:18 -06:00
Joel Dice
ace985b390
fix native method lookup for fast calling convention on Windows
2009-05-31 14:41:07 -06:00
Joel Dice
b1d92fc6c2
fix compilation of synchronized methods which return values
2009-05-31 14:15:45 -06:00
Joel Dice
02fba10614
set DebugCompile to false
2009-05-28 19:56:15 -06:00
Joel Dice
f30e31e5f6
compile-x86.S bugfixes and cleanups
2009-05-28 19:54:32 -06:00
Joel Dice
14613193fa
include return address size in frameSize passed to vmInvoke; fix printf warnings
2009-05-28 19:50:44 -06:00
Joel Dice
2478d4fc7f
conditionally include continuation code in compile-x86.S
2009-05-28 19:13:15 -06:00
Joel Dice
b4dea1f71c
fix printf warnings in compiler.cpp
2009-05-28 19:12:26 -06:00
Joel Dice
d99f8df6e6
several bugfixes for powerpc continuations
2009-05-28 18:56:05 -06:00
Joel Dice
ec60b844d4
fix powerpc tail calls
2009-05-27 18:15:39 -06:00
Joel Dice
49a2c1846d
powerpc bugfixes
2009-05-26 19:30:11 -06:00
Joel Dice
2608a2ee43
progress towards powerpc continuation and tail call support
2009-05-26 19:02:39 -06:00
Joel Dice
31eb75a736
support tail calls and continuations as build options
2009-05-25 23:27:10 -06:00
Joel Dice
deefc47b1a
correct comment in vmInvoke
2009-05-25 21:39:17 -06:00
Joel Dice
31d9700c9b
move SystemClassLoader and Runtime.dumpHeap to avian package
2009-05-25 21:36:29 -06:00
Joel Dice
9682d63b84
fix marshalling of 64-bit arguments in interpret.cpp
2009-05-25 21:20:29 -06:00
Joel Dice
43f5c3f382
fix process=interpret build
2009-05-25 21:05:49 -06:00
Joel Dice
758325ae27
convert methods in builtin.cpp to use fast native calling convention
2009-05-25 20:02:25 -06:00
Joel Dice
ea5fea4802
fix printf format for 64-bit build
2009-05-25 14:59:36 -06:00
Joel Dice
9837528a3e
set Thread::continuation before calling jumpAndInvoke in Rewind case of callContinuation
2009-05-24 22:49:39 -06:00
Joel Dice
0a4e77ffa7
fix thinko in callContinuation
2009-05-24 22:36:16 -06:00
Joel Dice
92aea95b36
continuation bugfixes
2009-05-24 22:27:50 -06:00
Joel Dice
c2bd828cc1
call the right continuation in callContinuation
2009-05-24 18:58:45 -06:00
Joel Dice
dc523fe6eb
load eax and edx in 32-bit vmJump
2009-05-24 18:57:59 -06:00
Joel Dice
af59c85deb
various bugfixes
2009-05-24 18:22:36 -06:00
Joel Dice
e80401ed10
vmJumpAndInvoke bugfixes
2009-05-24 11:18:17 -06:00
Joel Dice
9dbea21ec4
add continuation support to 32-bit section of compile-x86.S
2009-05-24 00:32:49 -06:00
Joel Dice
18ec68c7b7
fix word order when pushing 64-bit values as arguments to helper thunks in appendCombine
2009-05-24 00:31:53 -06:00
Joel Dice
364f31b785
finish initial sketch of dynamicWind implementation
2009-05-23 19:49:14 -06:00
Joel Dice
4305fdc7f3
begin dynamicWind implementation
2009-05-23 16:15:06 -06:00
Joel Dice
79558e7e34
fix GCC 4.4 warnings
2009-05-22 18:21:11 -06:00
Joel Dice
e165d5f3fd
avoid uninitialized variable warnings in MyProcessor::callWithCurrentContinuation
2009-05-19 18:28:43 -06:00
Joel Dice
ecfecf2006
translate local indexes before passing to Frame.stored{Int,Long,Object}
2009-05-18 09:16:17 -06:00
Joel Dice
398dec58bb
GC bugfixes
2009-05-17 17:43:48 -06:00
Joel Dice
195d95d809
continuation bugfixes
2009-05-16 18:39:08 -06:00
Joel Dice
8cb59c9d4c
various bugfixes to get Continuations test working
2009-05-16 02:03:03 -06:00
Joel Dice
57cec2d068
various bugfixes
2009-05-14 20:08:01 -06:00
Joel Dice
3d1ef68001
various bugfixes
2009-05-12 12:16:55 -06:00
Joel Dice
66c4867f18
more work on continuation support
2009-05-05 18:29:05 -06:00
Joel Dice
eb3bd25aa1
code cleanup and build fixes
2009-05-04 19:04:17 -06:00
Joel Dice
0cd4eb2655
early sketch of continuation support
2009-05-03 14:57:11 -06:00
Joel Dice
90dcf084a2
protect object from GC in compileVirtualMethod2; condense frame GC root maps to minimum size needed
2009-04-27 14:46:43 +00:00
Joel Dice
fd99691b00
fix CallEvent::popIndex calculation
2009-04-26 21:59:22 -06:00
Joel Dice
50529969f9
fix code to visit GC roots on stack to be compatible with tail calls; avoid generating unreachable jumps
2009-04-26 19:53:42 -06:00
Joel Dice
299699f1ff
fix stack unwinding for new calling convention (2nd try)
2009-04-26 16:06:15 -06:00
Joel Dice
03653d2dd8
fix stack unwinding and GC root scan for new calling convention
2009-04-26 15:55:35 -06:00
Joel Dice
f80fb9b536
refine code for picking target sites to avoid unecessary moves
2009-04-26 12:19:16 -06:00
Joel Dice
64b529c915
avoid generating unreachable code after tail calls
2009-04-25 20:54:36 -06:00
Joel Dice
bf8fdb6316
visit MyProcessor::virtualThunks during GC
2009-04-25 20:24:04 -06:00
Joel Dice
630fde86f7
freeze registers in CallEvent::compile to ensure they are not used as temporaries by the assmebler
2009-04-25 20:07:47 -06:00
Joel Dice
0245a94ab8
generate code in ReturnEvent if and only if the event is preceded by at least one non-tail-call
2009-04-25 19:51:33 -06:00
Joel Dice
89221bfcfa
fix handling of virtual calls to native methods
2009-04-25 17:52:08 -06:00
Joel Dice
141862470b
fix stack pointer adjustment in invokeNative2; pad frame size using Architecture::frameFootprint in MyProcessor::invoke to conform to new calling convention
2009-04-25 17:33:42 -06:00
Joel Dice
5354e36530
fix unsafe stack pointer adjustment in vmInvoke
2009-04-25 17:31:24 -06:00
Joel Dice
1ed7c0d94c
adapt native method call code to new calling convention
2009-04-25 11:49:56 -06:00
Joel Dice
de84afe2fe
adjust stack if necessary after non-tail-call in case where callee pops arguments
2009-04-25 11:47:41 -06:00
Joel Dice
3113ae74eb
various bugfixes
2009-04-22 01:39:25 +00:00
Joel Dice
717f359666
implement "callee pops arguments" calling convention and refactor tail call code accordingly
2009-04-19 16:36:11 -06:00
Joel Dice
dba72409aa
move use of SingleRead::successor; fix build errors
...
We now use SingleRead::successor in pickTarget, where we use it to
determine the prefered target site for the successor without requiring
the target to conform to that preference. The previous code made the
preference a hard requirement, which is not desirable or even possible
in general.
2009-04-07 18:55:43 -06:00
Joel Dice
35d1c6e068
add SingleRead::successor; fix build errors
...
The SingleRead::successor field is used (when non-null) to further
constrain the SiteMask in SingleRead::intersect based on reads of
successor values (as in the cases of moves and condensed-addressing
combine and translate instructions).
2009-04-06 18:34:12 -06:00
Joel Dice
fea92ed995
more work on tail recursion
...
We now create a unique thunk for each vtable position so as to avoid
relying on using the return address to determine what method is to be
compiled and invoked, since we will not have the correct return address
in the case of a tail call. This required refactoring how executable
memory is allocated in order to keep AOT compilation working. Also, we
must always use the same register to hold the class pointer when
compiling virtual calls, and ensure that the pointer stays there until
the call instruction is executed so we know where to find it in the
thunk.
2009-04-05 15:42:10 -06:00
Joel Dice
5e740170f2
initial sketch of tail call optimization (non-virtual calls only, so far)
2009-03-31 14:15:08 -06:00
Joel Dice
b871f430d0
avoid reading below the stack pointer in vmInvoke, since it upsets valgrind
2009-03-19 08:44:08 -06:00
Joel Dice
538e23c642
fix order-of-operations bugs in compile.cpp which led to creation of incorrect stack maps
2009-03-18 16:24:13 -06:00
Joel Dice
c9400316fd
try harder to find a suitable stack frame site in pickTarget when there are no free registers left
2009-03-16 20:03:59 -06:00
Joel Dice
f5c79355f2
set StealRegisterReserveCount to 2 to avoid running out of registers in when shuffling values around on the stack
2009-03-16 18:00:51 -06:00
Joel Dice
d1018bf078
update copyright years
2009-03-15 12:02:36 -06:00
Joel Dice
0ce644cca2
put new thread into active state in AttachCurrentThread
2009-03-14 18:07:38 -06:00
Joel Dice
073b829c79
avoid running out of eligable source registers for writing a single byte to memory on x86
2009-03-14 16:47:26 -06:00
Joel Dice
12640219e6
handle b == dst case in andC
2009-03-14 14:34:44 -06:00
Joel Dice
8d9409112c
reuse source site as destination site if appropriate in getTarget
2009-03-14 14:17:32 -06:00
Joel Dice
54b691f4de
handle b == t case in multiplyR and remainderR
2009-03-14 14:14:49 -06:00
Joel Dice
ee2d105f6c
freeze move operand sites prior to calling the assembler so the assembler won't steal them
2009-03-13 20:55:41 -06:00
J. Treadwell
21fa23d84b
fixed multiplyC bug (all multiplies now delegated to multiplyR)
2009-03-13 18:37:40 -06:00
Joel Dice
4c27755a53
fix endianness issue storing and loading longs
2009-03-11 21:07:30 -06:00
Joel Dice
49cd2dd9bf
fix powerpc bootimage build (second try)
2009-03-10 19:08:16 -06:00
Joel Dice
6c271ac994
fix powerpc bootimage build
2009-03-09 18:52:09 -06:00
Joel Dice
c11203b401
pass srcSelectSize instead of srcSize to Architecture::plan in appendMove
2009-03-09 12:31:41 -06:00
Joel Dice
8ac6fb9d75
fix x86_64 build
2009-03-09 15:29:37 +00:00
Joel Dice
89a2739165
sync instruction cache after compiling a method
2009-03-09 08:26:23 -06:00
Joel Dice
4347228585
fix thinko in addC for zero constant case
2009-03-08 20:55:54 -06:00
Joel Dice
68ed5e6cb5
fix addC for case where bit 15 of constant is set
2009-03-08 20:09:06 -06:00
Joel Dice
8b0f7d790f
don't assume sizeof(bool) == 8
2009-03-07 18:23:28 -07:00
Joel Dice
e1395f300a
fix warnings for optimized build
2009-03-07 17:52:18 -07:00
Joel Dice
14c6deb710
do two passes in MyCompiler::initLocalsFromLogicalIp in order to properly link multiword values together
2009-03-07 17:39:55 -07:00
Joel Dice
661b49ea92
Merge branch 'master' into powerpc
2009-03-07 16:41:17 -07:00
Joel Dice
abe6ada0c2
Merge branch 'master' of oss.readytalk.com:/var/local/git/avian
2009-03-07 16:40:56 -07:00
Joel Dice
ea4764c924
Merge branch 'master' into powerpc
2009-03-07 16:40:23 -07:00
Joel Dice
7add34944b
protect source site from being used as a temporary for move operations
2009-03-07 16:32:05 -07:00
Joel Dice
376941ab35
fix single-precision float marshalling in dynamicCall
2009-03-07 14:32:08 -07:00
Joel Dice
0aaee96479
allocate executable memory area all at once to ensure it is contiguous, since immediate relative jumps on PowerPC can only cross 2^26 bytes of memory
2009-03-07 12:03:27 -07:00
Joel Dice
fd7bef7db3
only accept sites conforming to specified SiteMask in getTarget
2009-03-06 17:37:54 -07:00
Joel Dice
9b9ae62541
defer to moveCR when adding or subtracting zero
2009-03-06 17:11:51 -07:00
Joel Dice
33ba8d084d
avoid unecessary subtraction in tableswitch
2009-03-06 17:11:14 -07:00
Joel Dice
b5f76d96dc
handle exception case in makeCodeImage
2009-03-06 17:10:31 -07:00
Joel Dice
e61d05f00b
undo temporary big endian offset correction before leaving maybeMove
2009-03-06 12:14:37 -07:00
Joel Dice
7388da6282
fix endianness issues when loading values smaller than BytesPerWord from the stack
2009-03-06 10:56:11 -07:00
Joel Dice
ca0d4b44c1
defer moveZCR to moveCR
2009-03-06 10:54:43 -07:00
Joel Dice
762df17aa7
use Architecture::plan in BranchEvent ctor to determine acceptable types for address
2009-03-05 20:27:59 -07:00
Joel Dice
a0e503ad0a
optimize moveRR and fix andC
2009-03-05 20:21:15 -07:00
Joel Dice
75e28e81c9
fix operand ordering in remainderR
2009-03-05 19:35:49 -07:00
Joel Dice
ec610a5521
handle shift counts greater than 31 properly
2009-03-05 19:05:39 -07:00
Joel Dice
16e81bcc07
fix orC
2009-03-05 18:33:00 -07:00
Joel Dice
7d48547f0e
fix compareUnsignedCR, which relied on sign extension in cmplwi, which actually does zero extension; fix use of li argument to instruction format I
2009-03-05 18:02:03 -07:00
Joel Dice
3e495b8ca5
use mulhwu and eliminate temporary in 64-bit multiplyRR
2009-03-04 19:50:03 -07:00
Joel Dice
77195713b8
fix xorR regression introduced in last commit
2009-03-04 19:22:47 -07:00
Joel Dice
cca3e72318
fix 64-bit xorC
2009-03-04 19:20:15 -07:00
Joel Dice
acfa1ee2ff
fix 64-bit negateRR
2009-03-04 18:59:04 -07:00
Joel Dice
d48e5377fe
add missing instruction to multiplyR
2009-03-04 18:43:53 -07:00
Joel Dice
a8da9ecb05
fix use of displacement parameter in instruction format B; use correct opcode in slw instruction
2009-03-04 18:20:54 -07:00
Joel Dice
296c93a04c
fix backwards logic in longCompare; correct unsupported use of JumpIfLessOrEqualC in shiftRightR; add multiply, divide, and remainder operations to table
2009-03-04 17:54:47 -07:00
Joel Dice
8cc1f6def8
remove dead code from MyCompiler::call
2009-03-04 17:52:55 -07:00
JET
dbcd42e70c
added 64-bit shifts and mul/div
2009-03-04 10:11:42 -07:00
Joel Dice
6e6035505c
zero heap space ahead of time when allocating raw storage and garbage collecting, not when allocating individual objects
...
This helps us support the Java Memory Model without adding a memory
barrier to every object allocation. It's also potentially more
efficient, since we zero out each heap segment all at once instead of
bit-by-bit with each object allocation.
2009-03-03 20:05:48 -07:00
Joel Dice
8410e1d683
ensure reads and writes of volatile 64-bit fields are atomic
2009-03-03 18:02:11 -07:00
Joel Dice
2ca8132d97
implement support for volatile fields
2009-03-02 20:18:15 -07:00
Joel Dice
8c9d625f8f
add memory barriers where appropriate in compile.cpp
2009-03-02 18:40:06 -07:00
Joel Dice
5f0b40e531
restore call to Client::releaseTemporary in moveCM
2009-03-01 23:07:28 +00:00
Joel Dice
6eacf7b804
fix bounds checks in MyCompiler::initLocalsFromLogicalIp
2009-03-01 22:47:07 +00:00
Joel Dice
97961ecdde
pick a temporary register which is valid as both a destination and a source for the required moves in maybeMove
2009-03-01 15:41:03 -07:00
Joel Dice
1192ef939e
fix stack offset calculation for multianewarray on x86
2009-03-01 15:39:52 -07:00
Joel Dice
7a2bf9b855
fix x86.cpp build
2009-03-01 15:14:51 -07:00
Joel Dice
28d4409b0a
implement negateRR
2009-03-01 12:57:07 -07:00
Joel Dice
36196910ed
implement xorR and xorC
2009-03-01 12:40:49 -07:00
Joel Dice
97e698d806
fix MyCompiler::peak for big-endian architectures
2009-03-01 12:36:30 -07:00
Joel Dice
696282631a
fix endianness issues with 64-bit locals
2009-03-01 12:28:17 -07:00
Joel Dice
412348d938
fix stack offset calulation for multianewarray
2009-03-01 10:49:37 -07:00
Joel Dice
117c89b9ee
change == to <= in moveCR2 since we only need to ensure dstSize is no more than the word size
2009-02-28 19:10:31 -07:00
Joel Dice
93ebb571b3
only add site to result if result is live in CombineEvent::compile and TranslateEvent::compile
2009-02-28 19:08:14 -07:00
Joel Dice
5adcfa3341
fix 32-bit indexed loads
2009-02-28 17:31:09 -07:00
Joel Dice
750f4d51da
fix extsb/extsh operand order in moveRR
2009-02-28 17:17:12 -07:00
Joel Dice
f01a78699f
fix opcode for lbzx
2009-02-28 16:58:54 -07:00
Joel Dice
b0422b32e6
implement orR and orC; add shift operations to ternary operation table
2009-02-28 16:28:10 -07:00
Joel Dice
d6bd2e7308
make Compiler::store take both a source size and a destination size to avoid endianness issues; change order of Compiler::load parameters to match
2009-02-28 16:17:24 -07:00
Joel Dice
10c75f4783
add longCompareC to ternary operation table
2009-02-28 15:04:04 -07:00
Joel Dice
5a8ffcd79b
implement moveZRR and moveZMR
2009-02-28 15:00:12 -07:00
Joel Dice
60c4bede39
fix undefined-order-of-operations bug in Frame::dupped
2009-02-28 14:41:05 -07:00
Joel Dice
3e6c30a4b5
always return an 8-byte value (or void) from native functions called from Java
...
This is important on the 32-bit OS X PowerPC ABI, since the location
of the low 32-bits of a return value change depending on whether the
entire value is 64-bits or not.
2009-02-28 14:20:43 -07:00
Joel Dice
c5dd97ffea
ensure that we release temporaries back to the compiler in powerpc.cpp; allow the first operand of a comparison to be a constant
2009-02-28 13:41:37 -07:00
Joel Dice
a2d2564d83
restore changes clobbered by commit 5a08062
2009-02-28 12:58:34 -07:00
Joel Dice
1249b11080
fix build breakage
2009-02-28 12:47:47 -07:00
Joel Dice
46a6744050
Merge commit 'origin/powerpc' into powerpc
2009-02-28 12:44:31 -07:00
Joel Dice
f8d7bea7e8
implement various compare and branch instructions
2009-02-28 12:36:02 -07:00
Joel Dice
f22ce3f996
fix parameter offset calculation in invokeNative2
2009-02-28 12:33:26 -07:00
JET
5a08062190
prelim 64-bit mult and shift support
2009-02-27 16:54:20 -07:00
Joel Dice
8ecd6a0394
fix and optimize andC
2009-02-26 18:56:57 -07:00
Joel Dice
4999c08e32
fix stack offset calculation for powerpc
...
This may break x86, in which case we'll iterate until they both work.
2009-02-26 18:54:25 -07:00
Joel Dice
73aa499371
clean up offsetToFrameIndex code
2009-02-26 18:53:35 -07:00
Joel Dice
d7d3dd5055
various bugfixes, especially concerning frame allocation and offset calculation
2009-02-25 20:49:42 -07:00
Joel Dice
6957492c7a
ignore base argument in powerpc version of vmJump and move thread argument into correct register
2009-02-25 20:47:38 -07:00
Joel Dice
b539d7b1e0
Merge commit 'origin/powerpc' into powerpc
...
Conflicts:
src/powerpc.cpp
2009-02-25 18:31:21 -07:00
Joel Dice
08af5deb36
implement andC and moveAR; fix MyArchitecture::nextFrame
2009-02-25 18:16:38 -07:00
Joel Dice
09c96a3063
simplify longCompare in x86.cpp such that the move function pointer parameter is eliminated and moveCR is called directly
2009-02-25 18:13:18 -07:00
Joel Dice
2554673dda
call c->arch->plan in CallEvent ctor to ensure the address operand is placed into the proper operand type for the call instruction
2009-02-25 18:11:41 -07:00
J. Treadwell
c148369d57
added multiply and divide instructions and intermediates
2009-02-25 09:37:44 -07:00
Joel Dice
0832c740fc
implement a few conditional and branch instructions
2009-02-24 18:29:04 -07:00
Joel Dice
571615a79f
fix stack space calculation in compile-powerpc.S
2009-02-24 18:28:05 -07:00
Joel Dice
299f8542b7
rename fooCRR and fooRRR to fooC and fooR, respectively; add entries to ternary operation table in populateTables
2009-02-24 09:13:11 -07:00
Joel Dice
b292cbb7f4
mask displacement in instruction format D; fix MyArchitecture::frameIp to look for return address at an 8-byte offset from the stack pointer
2009-02-24 08:04:55 -07:00
Joel Dice
eef5047a52
various bugfixes in powerpc.cpp
2009-02-23 21:25:15 -07:00
J. Treadwell
ee90d7bd2c
merged ppc changes
2009-02-23 20:57:25 -07:00
JET
2d09f57cbd
added instructions
2009-02-23 19:16:42 -07:00
Joel Dice
da8520754d
progress towards compiling and running simple methods on powerpc
2009-02-23 19:11:32 -07:00
Joel Dice
79a1d0451f
fix GCC 4.2 -Os uninitialized variable warning in windows.cpp
2009-02-22 17:44:11 -07:00
Joel Dice
8add9db0b2
fix GCC 4.x aliasing warnings in windows.cpp
2009-02-22 17:04:58 -07:00
Joel Dice
9a9b2c611a
sketch of new powerpc.cpp implementation
2009-02-21 12:30:25 -07:00
Joel Dice
a9e85e5de8
fix compare instruction syntax in compile-powerpc.S
2009-02-18 17:46:07 -07:00
Joel Dice
324caaf98b
add size parameter to Assembler::returnLow since the register used depends on the return value size on PowerPC
2009-02-17 18:19:31 -07:00
Joel Dice
c88e3fa230
ensure stack alignment in compile-x86.S and update vmInvoke to accept frame size parameter
2009-02-16 19:49:28 -07:00
Joel Dice
17b4c20435
fix windows build
2009-02-16 19:48:29 -07:00
Joel Dice
ba4e2a6582
rename compile.S to compile-x86.S and add compile-powerpc.S
2009-02-16 08:21:12 -07:00
Joel Dice
773e229112
fix powerpc native call bugs
2009-02-15 14:24:20 -07:00
Joel Dice
bec13838c1
Merge branch 'powerpc' of oss.readytalk.com:/var/local/git/avian
2009-02-15 12:34:01 -07:00
Joel Dice
cea5a9315d
fix block delimiting code in compile.cpp to avoid cycles and nested blocks
2009-02-15 11:11:00 -07:00
Joel Dice
7803663fc9
fix block delimiting code in compiler.cpp to minimize the number of blocks needed
...
This exposed bugs in x86.cpp concerning alignment padding which are now
fixed.
2009-02-14 17:52:44 -07:00
Joel Dice
4b2d74f656
fix merge conflict bug preventing the bootimage code from seeing, marking, and fixing jsr addresses
2009-02-14 14:23:23 -07:00
Joel Dice
f58f7b3bdf
fix bugs pertaining to tracking reads and and value sites across subroutines (jsr and ret instructions)
2009-02-14 13:26:39 -07:00
Joel Dice
93142bb952
support filtering based on class name, method name, and method spec in
...
bootimage.cpp
This is useful for debugging the compiler, since it allows you to
compile one method in particular if that's where a bug manifests itself.
2009-02-14 13:23:31 -07:00
U-JOELDICEXPVM\Joel Dice
ec5c64d472
fix Cygwin build
2009-02-13 17:03:46 -07:00
Joel Dice
e3257134c9
fix merge-related regression affecting bootimage build
2009-02-09 19:00:53 -07:00
Joel Dice
9b0d6854ec
fix merge conflicts
2009-02-09 16:22:51 -07:00
Joel Dice
a1ec71423e
Merge branch 'master' into powerpc
...
Conflicts:
makefile
src/assembler.h
src/binaryToMacho.cpp
src/compile.cpp
src/compiler.cpp
src/x86.cpp
2009-02-09 16:22:01 -07:00
Joel Dice
a1fc8a4dac
add site to result in MemoryEvent::compile regardless of whether the result is live, since the memory location may be used as the target of a move and we need to keep the reference count of the base and index registers nonzero
2009-02-08 19:08:56 -07:00
Joel Dice
29616c4abc
freeze target site when using temporary in maybeMove
2009-02-08 18:58:33 -07:00
Joel Dice
4ca45ffa41
fix two bugs concerning tracking available registers and reserving them when necessary
2009-02-08 16:20:28 -07:00
Joel Dice
0fbe89c147
set Value::high when appropriate in MyCompiler::initLocalsFromLogicalIp
2009-02-08 15:13:49 -07:00
Joel Dice
175ec1ff48
remove debug logging
2009-02-08 13:22:28 -07:00
Joel Dice
5066bfdabf
tweak register and frame site allocation code to avoid failure in corner cases
2009-02-08 13:21:35 -07:00
Joel Dice
55d2ee1823
avoid clobbering values in sign-extension case of MoveEvent.compile
2009-02-02 19:13:02 -07:00
Joel Dice
123e22322c
turn off debug logging
2009-02-01 16:21:55 -07:00
Joel Dice
2e3fd111d4
fix regressions on x86_64
2009-02-01 16:19:11 -07:00
Joel Dice
8b1801c465
various bugfixes involving multiword values
2009-02-01 16:10:56 -07:00
Joel Dice
11408dc2cd
fix popIndex calculation in CallEvent ctor
2009-01-31 12:35:45 -07:00
Joel Dice
8b6319fbc8
assume stack grows towards negative addresses when loading and storing multiword locals
2009-01-31 12:05:06 -07:00
Joel Dice
a11d018dc2
fix assertion in MyCompiler::peek
2009-01-29 18:43:46 -07:00
Joel Dice
8dca14af74
remove obsolete assertion from negateRR
2009-01-29 18:43:18 -07:00
Joel Dice
1c3504b62a
fix various stack bugs
2009-01-29 18:36:19 -07:00
Joel Dice
565ece136b
begin refactoring compiler.cpp to treat each word of a multiword value seperately
2009-01-25 15:03:38 -07:00
Joel Dice
034444db57
fix a couple of bugs handling multi-word values
2009-01-12 09:26:43 -07:00
Joel Dice
582e975a8a
remove temporary debug code
2009-01-11 16:46:36 -07:00
Joel Dice
85ac9b9c71
revert overflow code in sitesToString since we now prune dead buddies from values
2009-01-11 16:46:22 -07:00
Joel Dice
05bd86e2ed
use upper 32 bits of mask in pickRegisterTarget when picking register for high word; set Target::Impossible to 5 since 4 is a valid cost
2009-01-11 16:42:41 -07:00
Joel Dice
04bc58fd95
reorder code in MemorySite::release so we can use low->size before it is overwritten
2009-01-11 16:24:25 -07:00
Joel Dice
5a76277b84
remove dead buddies from values so they don't accumulate without bound; when resolving sites, avoid picking those which belong to other values; various bugfixes
2009-01-11 15:53:51 -07:00
Joel Dice
e3976e66d3
avoid using all registers when marshalling sites, since we need at least one register free for memory-to-memory moves; various bugfixes
2009-01-11 11:48:02 -07:00
Joel Dice
54ad7c4e98
tolerate ConstantValue attributes on non-static fields, since the compiler ensures that they are initialized in any constructors for that class (i.e., the VM does not need to do anything special to initialize them)
2009-01-10 12:25:52 -07:00
Joel Dice
8459489212
avoid overflow in sitesToString
2009-01-04 15:58:05 -07:00
Joel Dice
9495d03dc6
explicitly load jump target in tableswitch to avoid retaining stale memory sites
2009-01-04 15:56:47 -07:00
Joel Dice
c56f37197c
marshal values at branches to avoid duplication of effort at junctions
2009-01-04 14:52:46 -07:00
Joel Dice
f4689093ee
try harder to find an acceptable source site in resolveSourceJunctionSites
2009-01-04 13:35:09 -07:00
Joel Dice
ce1e161f52
allocate larger buffer for sitesToString
2009-01-04 12:38:31 -07:00
Joel Dice
095e6d7bc3
prefer unowned resources in resourceCost
2009-01-04 12:34:38 -07:00
Joel Dice
d76b4121ae
fix 64-bit constant case in addCR and subtractCR
2009-01-04 12:32:11 -07:00
Joel Dice
ded2ffe437
more compile.cpp refactoring
2009-01-03 18:17:51 -07:00
Joel Dice
ae24a6c18e
continue refactoring compiler.cpp to simplify register and frame resource allocation
2009-01-03 14:34:45 -07:00
Joel Dice
7b546936d6
snapshot
2009-01-02 17:44:47 -07:00
Joel Dice
c678fb30a4
snapshot
2008-12-24 13:35:43 -07:00
Joel Dice
f96ee3ea73
handle p->value->reads == 0 case in visit
2008-12-22 18:25:00 -07:00
Joel Dice
897586aa76
clobber overlapping locals in storeLocal; move fallback code in trySteal to increase its applicability
2008-12-22 17:55:29 -07:00
Joel Dice
ac37941fa5
fix build error in previous commit
2008-12-21 18:14:24 -07:00
Joel Dice
c9bec0ce96
only steal sites recursively when all else fails in trySteal
2008-12-21 18:14:20 -07:00
Joel Dice
c78e76c747
temporarily reacquire source in releaseRegister
...
This avoids a SEGV when freezing the register.
2008-12-21 14:48:26 -07:00
Joel Dice
055ec4dd9f
various fixes and cleanups concerning 64-bit values on 32-bit systems
2008-12-21 14:41:56 -07:00
Joel Dice
b23f7374e9
don't steal sites in pickJunctionSite
2008-12-20 17:45:52 -07:00
Joel Dice
b9b7ae4003
avoid clobbering first operand in CombineEvent.compile
2008-12-20 16:05:01 -07:00
Joel Dice
cf4e8e7ec2
various fixes for marshalling values among registers and frame sites
2008-12-20 14:55:45 -07:00
Joel Dice
75b3bf98ab
pick only unfrozen frame sites in save
2008-12-20 11:13:58 -07:00
Joel Dice
bd89b8e00a
check for null array in HashMapIterator::find
2008-12-18 20:23:08 -07:00
Joel Dice
2622773eb4
support bootimage build on OS X
2008-12-18 19:52:03 -07:00
Joel Dice
e55b59905e
Merge branch 'master' of oss.readytalk.com:/var/local/git/avian
2008-12-18 16:32:23 -07:00
Joel Dice
5e727c8c5d
throw an error if a volatile field is encountered, since we don't yet support them properly
2008-12-18 16:32:18 -07:00
Joel Dice
7ce35b212f
fix GCC 4.0.1 uninitialized value warning
2008-12-18 10:10:19 -07:00
Joel Dice
a40ae85588
clear sites from dead value in removeBuddy
2008-12-15 18:21:01 -07:00
Joel Dice
8819d01522
only set Context::forfeitedSite if value is live
2008-12-15 17:42:32 -07:00
Joel Dice
39358e6652
update junction read based on liveness of local value on first visit to junction, not stub read value
2008-12-15 07:35:19 -07:00
Joel Dice
7f4bd51464
don't use trySteal when moving sites between buddies
2008-12-13 13:54:26 -07:00
Joel Dice
4717e94fa3
remove value buddies after setting sites to junction sites, not after populating junction sites
...
This mirrors how snapshots are captured and restored for branch events.
Also, switch back to resolving junction sites before capturing fork
snapshots so we capture the true state of each value immediately before
the branch.
2008-12-13 12:59:02 -07:00
Joel Dice
d50febe088
various control-flow related bugfixes
2008-12-11 18:09:36 -07:00
Joel Dice
8b2a6f85fc
remove divideCR and remainderCR
...
This forces the compiler to explicitly move the constant operand into
a register, avoiding the possibility that AX or DX might be unavailable
when the assembler needs them.
2008-12-11 18:08:16 -07:00
Joel Dice
aa7b47eec4
fix merge confict fallout in heapdump.cpp
2008-12-04 14:35:25 -07:00
Joel Dice
7d68c9b0a5
Merge branch 'bootimage' of oss.readytalk.com:/var/local/git/avian
...
Conflicts:
src/heapdump.cpp
2008-12-04 14:29:17 -07:00
Joel Dice
58a90f2b84
fix regressions for non-bootimage case
2008-12-03 19:09:57 -07:00
Joel Dice
93d4fbc43d
fix platform=windows and process=interpret builds
2008-12-03 08:44:07 -07:00
Joel Dice
457c3d135e
return Tenured from MyHeap::status if the object resides in the immortal heap
2008-12-02 19:41:22 -07:00
Joel Dice
4098368cb9
fix non-debug build of compile.cpp
2008-12-02 19:39:56 -07:00
Joel Dice
851efc8d10
handle case of unresolved promise in compareCR and compareCM
2008-12-02 19:39:09 -07:00
Joel Dice
bcfdc03631
fix build breakage in heapdump.cpp
2008-12-02 19:38:32 -07:00
Joel Dice
d4363d250a
mark and fix up absolute addresses in boot image code
2008-12-02 09:45:20 -07:00
Joel Dice
25ade1484a
lots of bugfixes and refactoring
2008-12-01 19:38:00 -07:00
Rich Scott
f13bf44e87
Check return value of fwrite() calls.
...
This is to satisfy GCC 4.3.2 (on Ubuntu 8.10), which requires it.
2008-12-01 16:53:34 -07:00
Joel Dice
eaf30eb909
fix static class initialization when using a boot image
2008-11-29 21:58:09 -07:00
Joel Dice
e44f326377
various bugfixes
2008-11-29 18:39:42 -07:00
Joel Dice
0ec5ad3701
update makefile to optionally build and use a boot image; various bugfixes
2008-11-29 16:08:14 -07:00
Joel Dice
0ef2ee1d02
refactor Segment::Map to support map data which is not allocated as part of the segment data
2008-11-29 13:37:03 -07:00
Joel Dice
702525fd32
support immortal heap area in heap.cpp
2008-11-28 19:31:06 -07:00
Joel Dice
b8056d905c
fix bugs in allocating and populating method object pools
2008-11-28 18:23:01 -07:00
Joel Dice
80815d35f7
fix fixed object tracking in heap.cpp
2008-11-28 18:22:09 -07:00
Joel Dice
4d1af63ed2
initial work on booting from boot image
2008-11-28 15:02:45 -07:00
Joel Dice
d22a9ab270
visit constants in visitRoots so they are included in the final heap image
2008-11-28 11:33:11 -07:00
Joel Dice
02afbd1fa1
handle unresolved constants in moveCM
2008-11-27 21:58:32 -07:00
Joel Dice
6dc181fad5
move allocation zone from makeCodeImage to writeBootImage so it stays in scope until after updateConstants is called
2008-11-27 21:58:04 -07:00
Joel Dice
a8a030140c
various bugfixes
2008-11-27 21:44:04 -07:00
Joel Dice
f698c24ea6
delay resolving method call offsets until all methods have been compiled when creating a boot image
2008-11-27 13:59:40 -07:00
Joel Dice
264779ed2a
copy site if necessary to avoid chaining to another site in resolveJunctionSite
2008-11-25 19:23:47 -07:00
Joel Dice
f9145528c8
do constant-to-memory movq in one instruction on amd64 when possible
2008-11-25 19:22:21 -07:00
Joel Dice
61ecb56e21
Merge branch 'master' of oss:/var/local/git/avian into powerpc
2008-11-25 16:19:21 -07:00
Joel Dice
fdb9c05ac6
avoid uninitialized value warnings from valgrind when DebugFrameMaps is true
2008-11-25 16:01:30 -07:00
Joel Dice
58a9718d82
clean stack sites more aggressively after function calls to avoid GC bugs
2008-11-25 16:00:40 -07:00
Joel Dice
eea2225176
save locals to memory before executing any instruction which might trigger an exception if that instruction lies within an exception handler
2008-11-25 10:34:48 -07:00
Joel Dice
035aa0ecd4
Merge branch 'master' of oss.readytalk.com:/var/local/git/avian into bootimage
...
Conflicts:
src/compile.cpp
src/machine.h
src/util.h
2008-11-23 17:02:34 -07:00
Joel Dice
20cf42c5e4
more work on boot image creation
2008-11-23 16:58:01 -07:00
Joel Dice
207f093464
never trigger a GC due to an immortal allocation
2008-11-23 11:48:39 -07:00
Joel Dice
fb9b2bf173
avoid creating garbage when iterating over hashmaps
2008-11-22 16:38:41 -07:00
Joel Dice
4392b04fd0
avoid creating unecessary garbage in treeInsertNode and friends
2008-11-22 16:25:35 -07:00
Joel Dice
6162dfafbb
increase heap pool size and fixed footprint threshold constants based on performance profiling and experimentation (second try)
2008-11-22 14:48:10 -07:00
Joel Dice
8a7852172e
increase heap pool size and fixed footprint threshold constants based on performance profiling and experimentation
2008-11-22 14:47:18 -07:00
Joel Dice
2e2925c321
fix backwards logic in treeMapInsert which prevented correct balancing
2008-11-22 14:14:52 -07:00
Joel Dice
6500f1eff6
initial work to support boot image creation and use
2008-11-21 16:20:35 -07:00
Joel Dice
e98da8440e
minor tweak to find function in heapdump.cpp to return 0 where we were returning false (which amounts to the same thing but is less confusing)
2008-11-19 18:09:02 -07:00
Joel Dice
3d9e508e3e
fix regression in last commit
2008-11-17 08:44:35 -07:00
Joel Dice
9aee242408
Merge branch 'powerpc' of oss:/var/local/git/avian into powerpc
...
Conflicts:
src/compiler.cpp
2008-11-17 08:22:07 -07:00
Joel Dice
7ea5a4a64f
avoid inifinite recursion in trySteal
2008-11-17 08:20:48 -07:00
Joel Dice
92a8a4d83b
clean up subroutine code in wake of merge from master branch
2008-11-15 18:03:43 -07:00
Joel Dice
9b6d4fdeab
Merge branch 'master' of oss.readytalk.com:/var/local/git/avian into powerpc
...
Conflicts:
src/compile.cpp
2008-11-15 17:49:08 -07:00
Joel Dice
dc2700d913
ensure that the saved exception in a finally block is visited during GC when the jsr instruction is used
2008-11-15 17:28:45 -07:00
Joel Dice
fb770d10fb
implement jsr/ret support
...
The Subroutine test won't pass due to a bug in the stack mapping code
such that objects may be missed during GC.
2008-11-13 17:59:21 -07:00
Joel Dice
fae0ccfe96
fix unused parameter warnings
2008-11-11 18:09:45 -07:00
Joel Dice
6f5613ebd9
minor code cleanup in MoveEvent::compile
2008-11-11 17:48:21 -07:00
Joel Dice
191bfb6141
fix 4-to-8 byte sign extensions for ia32 and clean up MoveEvent; all tests now pass on ia32
2008-11-11 17:39:26 -07:00
Joel Dice
acfd9689b2
Merge branch 'master' of oss:/var/local/git/avian into powerpc
...
Conflicts:
makefile
src/assembler.h
src/compile.cpp
src/compiler.cpp
src/compiler.h
src/finder.cpp
2008-11-11 12:15:19 -07:00
Joel Dice
e859502811
handle unresolved constants in moveCM
2008-11-11 11:56:43 -07:00
Joel Dice
671fd1c0f9
set popIndex for stack arguments in CallEvent constructor
2008-11-11 11:56:23 -07:00
Joel Dice
0bef625500
fix thinko in logCompile
2008-11-11 09:17:11 -07:00
Joel Dice
c80eb51c17
Merge branch 'master' into powerpc
...
Conflicts:
makefile
src/assembler.h
src/compile.cpp
src/compiler.cpp
src/compiler.h
src/finder.cpp
2008-11-11 08:21:48 -07:00
Joel Dice
2304a656cf
in releaseRegister, if the register is not the exclusive site of a value, steal it
2008-11-10 21:25:36 -07:00
Joel Dice
54cda3ca61
specify register contraints for Negate instruction in MyArchitecture::plan
2008-11-10 20:23:33 -07:00
Joel Dice
96a7c71c30
fix loading 8-byte values on 32-bit systems
2008-11-10 19:12:36 -07:00
Joel Dice
81d532c4f0
handle overlap cases in moveRR
2008-11-10 19:11:32 -07:00
Joel Dice
5fc9ad058b
more bugfixes; all tests pass on amd64
2008-11-10 17:07:44 -07:00
Joel Dice
00d8142de9
various bugfixes; all but one test are passing on amd64
2008-11-09 16:56:37 -07:00
Joel Dice
000aeb25c1
handle case where first instruction is the target of a branch properly
2008-11-08 16:21:30 -07:00
Joel Dice
decd24965a
implement multiplyCR and divideCR
2008-11-08 15:42:26 -07:00
Joel Dice
61539bae31
fix stack mapping bugs which broke GC
2008-11-08 15:36:38 -07:00
Joel Dice
312539af64
fix moves involving sign or zero extension
2008-11-08 13:47:26 -07:00
Joel Dice
f01f4441d9
various bugfixes and instructions implemented to get more tests passing
2008-11-06 17:39:38 -07:00
Joel Dice
1ba497d90a
fix Exceptions test for amd64
2008-11-02 15:25:51 -07:00
Joel Dice
04da77e95b
snapshot
2008-11-02 13:35:35 -07:00
Joel Dice
3e81405a33
snapshot
2008-11-01 16:16:18 -06:00
Joel Dice
dd4dc18916
snapshot
2008-11-01 13:14:13 -06:00
Joel Dice
6f1d02dae7
remove the libstdc++ dependency once and for all
...
The trick is to make all destructors non-virtual. This is safe because
we never use the delete operator, which is the only case where virtual
destructors are relevant. This is a better solution than implementing
our own delete operator, because we want libraries loaded at runtime to
use the libstdc++ version, not ours.
2008-10-28 15:40:50 -06:00
Joel Dice
88a1faa2a2
set global system pointer to null in MySystem::dispose in windows.cpp
2008-10-28 12:15:27 -06:00
Joel Dice
01cc868797
remove debug code from builtin.cpp
2008-10-27 15:39:14 -06:00
Joel Dice
4d613f404f
use dbghelp.dll to generate crash dump file on Windows XP and later
...
The dump is written to the directory specified via the avian.crash.dir
system property if that property is set and is not written otherwise.
2008-10-27 15:13:27 -06:00
Joel Dice
d20ee74d79
fix stack frame offset calculations for 64-bit values; insert dummy events for instructions which start with stack activity
2008-10-24 20:12:02 -06:00
Joel Dice
003afdc918
fix heap dump facility to visit all roots
2008-10-24 18:48:10 -06:00
Joel Dice
3b67417695
heap dump bugfixes
2008-10-22 18:05:34 -06:00
Joel Dice
d25a6098e6
remove support for hiding constructors and accessors in type-generator.cpp
...
This feature is not being used, and it may be the cause of this bug:
http://groups.google.com/group/avian/browse_thread/thread/955aa1479e9fddca
2008-10-22 08:39:27 -06:00
Joel Dice
e2f3e3da77
enter active state at start of Java_java_lang_Runtime_dumpHeap
2008-10-21 17:49:32 -06:00
Joel Dice
0459a7701c
enter exclusive state before dumping heap
2008-10-21 17:47:38 -06:00
Joel Dice
6a5116e7a7
implement primitive heap dump facility for memory profiling, accessible via Runtime.dumpHeap
...
The proper way to do this is to implement a subset of JVMTI, but this
will do the job for now.
2008-10-21 17:38:20 -06:00
Joel Dice
7d6ca28b2f
snapshot
2008-10-18 18:15:57 -06:00
Joel Dice
26614e2182
use same code to spill registers and stack frame slots
2008-10-16 18:10:35 -06:00
Joel Dice
5391c68efd
bugfixes
2008-10-14 18:45:31 -06:00
Joel Dice
aaaf388652
fix handling of instructions which are targets of more than one conditional branch
2008-10-13 18:18:18 -06:00
Joel Dice
f38a55cbb2
make linking against libstdc++ the default, overrideable via use-libstdcpp make parameter
2008-10-13 16:31:59 -06:00
Joel Dice
3c798f5bd7
various bugfixes concerning control flow boundaries
2008-10-11 18:23:08 -06:00
Joel Dice
5c04c19e29
look for %s@%d format symbols when resolving native methods on Windows, which obviates the need for -k flag to dlltool
2008-10-10 17:37:36 -06:00
Joel Dice
81cb951b08
fix stack corruption due to spurious pop events generated for jsr bytecodes
2008-10-09 17:14:52 -06:00
Joel Dice
83d5d6fde4
avoid unnecessary moves in resolveJunctionSite; distinguish between branches and other events when deciding when to marshal values at junctions
2008-10-07 18:08:13 -06:00
Joel Dice
f6c4496166
various bugfixes
2008-10-05 18:50:59 -06:00
Joel Dice
adb63778f0
fix stack and local snapshots for DummyEvents
2008-10-04 18:14:43 -06:00
Joel Dice
d54ee9081b
return null for null argument to MyArchitecture::frameIp
2008-10-04 18:12:29 -06:00
Joel Dice
83aa342bc8
hello, world on amd64
2008-10-04 11:26:35 -06:00
dain
c9e0aa824d
Initialized variables to appease gcc 4.2
2008-10-02 13:20:30 -06:00
Joel Dice
07daa9be51
free properties array in Machine::dispose
2008-09-30 17:03:13 -06:00
Joel Dice
df75153a85
handle case of null Stack::pushEvent in CallEvent ctor
2008-09-30 11:22:46 -06:00
Joel Dice
89cc5aa546
initialize JarElement::region in constructor
2008-09-29 18:04:47 -06:00
Joel Dice
823327a00b
fix bytecode address calculations which broke when using -Os
2008-09-29 08:46:44 -06:00
Joel Dice
d409f89d5d
ensure that only one value holds a given frame site at at time
2008-09-28 15:56:12 -06:00
Joel Dice
61c708d7b2
reserve stack space for arguments to native calls
2008-09-28 13:00:52 -06:00
Joel Dice
c699725cf8
avoid running out of registers when picking junction sites
2008-09-27 16:01:39 -06:00
Joel Dice
965b83303f
implement additional instructions
2008-09-27 16:00:58 -06:00
Joel Dice
1910e1b837
Merge branch 'master' of oss.readytalk.com:/var/local/git/avian
2008-09-26 18:17:41 -06:00
Joel Dice
ac988f7a0d
fix static field lookup from interfaces
2008-09-26 18:17:13 -06:00
J. Treadwell
27e8bd1406
Temporary StringBuilder fix
2008-09-26 11:31:47 -06:00
Joel Dice
11c2afbf91
bugfixes
2008-09-24 18:48:32 -06:00
Joel Dice
f2bf152eba
more bugfixes
2008-09-23 18:01:42 -06:00
Joel Dice
d4938115ef
various bugfixes
2008-09-23 15:18:41 -06:00
Joel Dice
b8dd495ada
fix build
2008-09-22 08:28:18 -06:00
Joel Dice
86bec5e3b7
sketch out handling of reads at control flow blocks with multiple predecessors
2008-09-21 18:58:54 -06:00
Joel Dice
1b4ad1db42
snapshot
2008-09-20 17:42:46 -06:00
Joel Dice
96c6c7f8ea
don't log JIT results to stderr unless DebugCompile is true
2008-09-19 16:43:06 -06:00
Joel Dice
1657fb794c
support logging addresses and names of JIT-compiled methods to a file specified via a system property
2008-09-19 11:34:37 -06:00
Joel Dice
fadb66044b
remove unused instructions from x86.cpp
2008-09-16 07:59:34 -06:00
Joel Dice
606e5cb238
lots of bugfixes - finally got Simple.pow() working
2008-09-14 20:28:42 -06:00
Joel Dice
bd9e8a77e2
improved tracking of data flow across control flow boundaries
2008-09-13 15:09:26 -06:00
Joel Dice
44ccd2b09e
write alignment padding to output buffer in MyAssembler::writeTo
2008-09-13 15:07:39 -06:00
Joel Dice
392a1417e5
lots of bugfixes and a few instructions added
2008-09-08 18:31:19 -06:00
Joel Dice
1dd25325c8
implement various instructions, including AlignedCall
2008-09-07 20:21:52 -06:00
Joel Dice
dcdf78dc44
fix localOffset calculation
2008-09-07 20:21:11 -06:00
Joel Dice
af9758a6d3
got a simple arithmetic test working
2008-09-07 14:12:11 -06:00
Joel Dice
9971eaa92a
support out-of-order compilation in x86 assembler
2008-09-06 19:37:12 -06:00
Joel Dice
ed806ca740
working towards compiling simple methods
2008-09-06 15:25:41 -06:00
Joel Dice
e13b755048
more progress towards new JIT code - this compiles but won't run properly
2008-09-05 09:00:38 -06:00
Joel Dice
5f7d68b404
snapshot
2008-08-30 14:12:27 -06:00
Joel Dice
767c3ce2e4
snapshot
2008-08-28 16:43:35 -06:00
Joel Dice
a062d8c975
progress towards refactored JIT compiler to support PowerPC and data flow analysis across control flow boundaries
2008-08-23 12:04:36 -06:00
Joel Dice
9908bbcf50
sketch new version of x86.cpp to conform to new assembler.h APIs
2008-08-19 17:38:37 -06:00
Joel Dice
9654e3445d
refactor stack walking and visiting code to abstract away certain details of stack layout which are architecture-specific
2008-08-18 09:23:01 -06:00
Joel Dice
4a3be37c67
snapshot
2008-08-17 13:32:40 -06:00
Joel Dice
4a022147cd
Merge branch 'master' of oss.readytalk.com:/var/local/git/avian into powerpc
2008-08-16 12:56:41 -06:00
Joel Dice
5dc0959294
snapshot
2008-08-16 12:46:14 -06:00
Joel Dice
9efe6f1f05
snapshot
2008-08-16 11:45:36 -06:00
Joel Dice
c8cc7d931b
maintain a table to look up methods called via JNI
...
This simplifies the JNI implementation for looking up methods. It also
fixes a bug where an applications calls GetStaticMethodID with class A
and then calls CallStatic<Type>Method with class B which extends A. The
old code would look in the wrong method table and thus call the wrong
method.
2008-08-15 12:32:33 -06:00
Joel Dice
78e48996b5
fix handling of native methods in stack walking code
2008-08-14 12:13:05 -06:00
Joel Dice
e46e222f38
wait for other threads to exit in DestroyJavaVM
2008-08-13 15:39:48 -06:00
Joel Dice
297e8f09ec
don't calculate the index in hashMapInsert until it's needed
2008-08-11 16:44:38 -06:00
Joel Dice
5f4d86a703
avoid potential corruption in hashMapInsert due to table-resize-on-GC
2008-08-11 15:20:12 -06:00
Joel Dice
22a5707966
remove obsolete code from postVisit; upgrade assert to expect for debugging
2008-08-11 15:16:55 -06:00
Joel Dice
6ee2b0280e
implement compareAM
2008-07-31 07:53:43 -06:00
Joel Dice
4299063be9
Merge branch 'master' of oss:/var/local/git/avian into powerpc
2008-07-23 17:58:36 -06:00
Joel Dice
29df431df5
snapshot
2008-07-23 17:58:29 -06:00
Joel Dice
c6071569bf
Merge branch 'powerpc' of oss:/var/local/git/avian into powerpc
2008-07-23 17:58:03 -06:00
Joel Dice
522e2ebc9f
fix bug in debug helper function
2008-07-21 14:41:29 -06:00
Joel Dice
6e3bbd3c5f
Merge branch 'master' of oss:/var/local/git/avian into powerpc
2008-07-17 17:34:52 -06:00
Joel Dice
f0c9deaa06
snapshot
2008-07-17 17:34:38 -06:00
Eric Scharff
13a535d1c6
Added a getContentLength() method to URLConnection
...
This is particularly important if you want to get the number of bytes of a
resource loaded by the class loader:
getClass().getResource("myFile").openConnection().getContentLength()
2008-07-15 09:36:52 -06:00
Joel Dice
a2ba391b89
support -Xbootclasspath and -Xbootclasspath/a options
2008-07-14 11:51:20 -06:00
Joel Dice
cfaf690306
update usage message (part 2)
2008-07-14 11:23:33 -06:00
Joel Dice
d20fc697cb
update usage message
2008-07-14 11:21:59 -06:00
Joel Dice
a6853fa820
rename -Xbootclasspath option to -Xbootclasspath/p to match Sun syntax and semantics
2008-07-14 11:16:34 -06:00
Joel Dice
920034e231
use JavaVMInitArgs instead of JDK1_1InitArgs in JNI_CreateJavaVM; support -Xbootclasspath option
2008-07-14 11:02:43 -06:00
Zsombor
0e539615e7
add Thread.name field
2008-07-13 18:21:04 -06:00
Joel Dice
2343483d8e
Merge branch 'master' of oss:/var/local/git/avian into powerpc
2008-07-13 12:47:49 -06:00
Joel Dice
bf58eaa6ba
assert that the target of an invokestatic call is a static method and that the targets of all other invokes are non-static
2008-07-12 14:52:14 -06:00
Joel Dice
623b5f84dc
fix GC-in-hashMapResize bug which occasionally resulted in corrupt Machine::monitorMap
2008-07-12 10:38:09 -06:00
Joel Dice
9c82bd2386
Merge branch 'master' of oss.readytalk.com:/var/local/git/avian
2008-07-11 22:01:57 -06:00
Joel Dice
fcd4f0c8f5
third attempt to properly fix race condition in compile function
2008-07-11 22:01:42 -06:00
Joel Dice
149949a2d2
Merge branch 'master' of oss.readytalk.com:/var/local/git/avian
2008-07-11 19:26:53 -06:00
Joel Dice
fa3ceb0a75
add assertions to hashMapResize and hashMapRemove to help debug rare infinite loop
2008-07-11 19:26:46 -06:00
Joel Dice
5a97caa4ca
fix recently-introduced GC safety bug
2008-07-11 19:24:37 -06:00
Joel Dice
e31f795661
include Thread::backupHeapIndex in heap footprint calculation
2008-07-11 19:21:53 -06:00
Joel Dice
b1f24079ec
fix race condition in compile function (part 2)
2008-07-11 18:14:30 -06:00
Joel Dice
0b79ab4fed
fix race condition in compile function
...
1. Thread A calls function F, which needs to be compiled. So it
compiles it.
2. Thread B calls function F, sees that it's already been compiled and
so runs it.
3. Thread B calls function G from function F, and G needs to be
compiled, but it needs to acquire the class lock first, which A owns.
4. Thread A causes a GC, walks thread B's stack, but function F has not
yet been added to the method tree, so it thinks the stack has no frames.
5. Thread A finally adds function F to the method tree.
6. Thread A causes another GC and walks thread B's stack again, and
this time it finds function F in the method tree.
7. AAAARRRRRGGGHHH!!!!!!
2008-07-11 18:11:13 -06:00
Joel Dice
23043d140f
snapshot
2008-07-05 14:21:13 -06:00
Joel Dice
107ac01304
fix addCR and subtractCR for cases of 64-bit constants on amd64
2008-07-02 08:52:35 -06:00
Joel Dice
0f94bea5a6
fix stress test breakage when throwing ArrayIndexOutOfBoundsExceptions
2008-06-27 09:09:14 -06:00
J. Treadwell
ee8f5a8cd8
First powerpc.cpp with actual ppc assembling (incomplete)!
2008-06-25 17:35:01 -06:00
Joel Dice
9bea21dec7
add copyright header to files which don't already have them
2008-06-25 14:53:48 -06:00
Joel Dice
61e65098df
use virtual dispatch when calling Thread.run from VM
2008-06-25 10:28:11 -06:00
Joel Dice
8512d6c74c
Merge branch 'master' of oss:/var/local/git/avian into powerpc
2008-06-23 17:38:16 -06:00
Joel Dice
3d84f31c13
fix longCompareCR on 64-bit systems
2008-06-17 09:32:46 -06:00
Eric Scharff
86a5e9ba8a
Removed debugging that should not have been checked in
2008-06-16 11:47:54 -06:00
Eric Scharff
2bfe6f0d13
Ensure we align the stack before any time we might enter a C function from
...
generated code
2008-06-16 10:55:29 -06:00
dicej
04724b657d
hello, world!
2008-06-15 14:17:52 -06:00
dicej
fb6624b9ae
add cfm_vectors to JNIEnvVTable to match jni.h on OSX
2008-06-15 12:51:04 -06:00
dicej
32f4feb4aa
use LOCAL macro to mark local symbols in *.S
2008-06-15 12:49:37 -06:00
dicej
a9ae50900a
define LinkageArea in powerpc.h and add the latter to makefile
2008-06-15 12:48:53 -06:00
dicej
b1750c0c9a
fix powerpc.S syntax errors
2008-06-15 12:28:48 -06:00
dicej
358f3f801b
Merge branch 'master' of oss.ecovate.com:/var/local/git/avian into powerpc
2008-06-15 11:48:05 -06:00
Joel Dice
b683d836c3
implement longCompareRR
2008-06-12 11:23:20 -06:00
Joel Dice
6f5cc9f45f
fix unused parameter warning
2008-06-12 11:09:53 -06:00
Joel Dice
eabb37e6eb
add lcmp instruction to Compiler and corresponding LongCompare instruction to Assembler, since that's the only efficient way to implement the lcmp bytecode on x86
2008-06-12 10:56:48 -06:00
Joel Dice
357acbdb0f
implement move4To8CR, which just defers to moveCR
2008-06-11 08:59:05 -06:00
Joel Dice
94f7efc160
ignore contents of stack location in popNow if the value already resides elsewhere besides the stack
2008-06-11 08:47:06 -06:00
Joel Dice
633ef83fa1
fix handling of values which appear more than once on the stack in trySteal
2008-06-10 18:48:46 -06:00
Joel Dice
b80a3cea85
handle constant comparisons (sometimes generated by ProGuard) in compiler
2008-06-10 18:17:44 -06:00
Joel Dice
dc136bb751
fix stack tracking weirdness for jsr instruction
2008-06-10 18:16:02 -06:00
Joel Dice
5b2065e76c
only elide constant multiply if constant is one, not zero (duh)
2008-06-10 18:14:15 -06:00
Joel Dice
fc8c5a2ea9
fix a few bugs revealed by ProGuard optimizations, including too-early constant propagation during array loads and stores
2008-06-10 08:49:13 -06:00
Joel Dice
4b67adaa0a
sketch vmNativeCall implementation for powerpc
2008-06-08 13:47:37 -06:00
Joel Dice
ca6215c720
start fleshing out powerpc.S
2008-06-06 08:55:16 -06:00
dicej
f375f6e85c
enable powerpc build for process=interpret (won't run yet, though)
2008-06-04 17:09:09 -06:00
dicej
9e0f0a17a7
Merge branch 'master' of oss.readytalk.com:/var/local/git/avian into powerpc
2008-06-04 16:22:46 -06:00
dicej
0ccf8d57ea
rough sketch of powerpc support
2008-06-04 16:21:27 -06:00
Joel Dice
ec791a90de
fix process=interpret build
2008-06-04 16:17:06 -06:00
Eric Scharff
2aadbaac38
Force alignment for native calls
2008-06-02 11:43:58 -06:00
Eric Scharff
33306aa2f5
Fix warning on confused Mac OS X gcc 4.0
2008-06-02 10:12:09 -06:00
Joel Dice
3b0e05b739
fix unused parameter warning
2008-06-02 08:13:20 -06:00
Joel Dice
ecfb853f17
use relative branches where possible on amd64
2008-06-02 07:49:09 -06:00
Joel Dice
2f3e1ea393
fix incorrect debug logging message
2008-05-31 19:40:18 -06:00
Joel Dice
7d1ed0da05
Merge branch 'compiler' of oss.readytalk.com:/var/local/git/avian
...
Conflicts:
src/compiler.cpp
2008-05-31 19:30:28 -06:00
Joel Dice
7cdff9f1ee
disable debug logging and fix build warnings
2008-05-31 17:06:45 -06:00
Joel Dice
eacca98c3f
fix regressions affecting 32-bit systems
2008-05-31 16:53:37 -06:00
Joel Dice
1450b12e5b
visit thunk objects during GC in MyProcessor::visitObjects
2008-05-31 16:24:32 -06:00
Joel Dice
e68a18248c
use codePromise helper function in CallEvent ctor
2008-05-31 16:24:04 -06:00
Joel Dice
65830a76c5
improve efficiency of array bounds checks and generate a thunk table for native functions called indirectly
2008-05-31 16:14:27 -06:00
Joel Dice
51256f3cc2
fix moveCM for 64-bit constants on 64-bit machines
2008-05-22 18:16:44 -06:00
Joel Dice
f05318b787
fix thinkos in d2i and friends
2008-05-22 18:08:41 -06:00
Joel Dice
3326aafdac
various 32-bit fixes
2008-05-22 11:15:18 -06:00
Joel Dice
21cb1c3c8f
remove Event::validate, since it is no longer needed and actually causes trouble
2008-05-20 16:47:53 -06:00
Joel Dice
36dbf1ad14
fix another local variable caching bug
2008-05-20 15:24:10 -06:00
Joel Dice
d604efd8f5
fix local variable caching bug
2008-05-20 13:11:42 -06:00
Joel Dice
651c4559db
implement compareAR
2008-05-19 10:39:05 -06:00
Joel Dice
983e64c86a
preserve old value of local variable *before* it is overwritten
2008-05-19 10:14:54 -06:00
Joel Dice
83da1ec205
preserve old value of local variable across store if it will be used later; tweak site ownership transfer in MoveEvent.compile
2008-05-19 08:53:40 -06:00
Joel Dice
292f84a3fa
fix thinko in laload implementation
2008-05-19 08:50:37 -06:00
Joel Dice
08a1921eb7
only set target equal to src->source in MoveEvent.compile if it is a simple load or store
2008-05-19 07:44:39 -06:00
Joel Dice
ad6153612b
disallow memory,constant comparisons on x86
2008-05-19 07:43:37 -06:00
Joel Dice
b52cefa86e
disallow memory operands in 32-bit comparisons on amd64
2008-05-19 07:27:05 -06:00