Commit Graph

333 Commits

Author SHA1 Message Date
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
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
fcd4f0c8f5 third attempt to properly fix race condition in compile function 2008-07-11 22:01:42 -06:00
Joel Dice
5a97caa4ca fix recently-introduced GC safety bug 2008-07-11 19:24:37 -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
8512d6c74c Merge branch 'master' of oss:/var/local/git/avian into powerpc 2008-06-23 17:38:16 -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
358f3f801b Merge branch 'master' of oss.ecovate.com:/var/local/git/avian into powerpc 2008-06-15 11:48:05 -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
dc136bb751 fix stack tracking weirdness for jsr instruction 2008-06-10 18:16:02 -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
dicej
0ccf8d57ea rough sketch of powerpc support 2008-06-04 16:21:27 -06:00
Eric Scharff
2aadbaac38 Force alignment for native calls 2008-06-02 11:43:58 -06:00
Joel Dice
ecfb853f17 use relative branches where possible on amd64 2008-06-02 07:49:09 -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
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
f05318b787 fix thinkos in d2i and friends 2008-05-22 18:08:41 -06:00
Joel Dice
292f84a3fa fix thinko in laload implementation 2008-05-19 08:50:37 -06:00
Joel Dice
3c30e815ec optimize multiple loads from the same local variable 2008-05-18 22:31:52 -06:00
Joel Dice
b2e25f4e17 reorder makeMultidimensionalArray parameters to remove the need for the caller to save the stack pointer in a temporary register 2008-05-18 09:45:11 -06:00
Joel Dice
04f4ad4f58 fix variadic argument passing bug on amd64 2008-05-14 17:22:44 -06:00
Joel Dice
08beaad1b6 various bugfixes related to new register allocation code 2008-05-13 11:27:57 -06:00
Joel Dice
f1809897bd fix build 2008-05-06 15:13:02 -06:00
Joel Dice
1cb9d0327a initialize body of exception handler table for GC safety 2008-05-05 19:17:29 -06:00
Joel Dice
bf08cc4c53 fix array bounds checks 2008-04-30 11:47:25 -06:00
Joel Dice
e2b24263a2 various bugfixes 2008-04-30 09:44:17 -06:00
Joel Dice
377e2864d9 fix argument marshalling for floating point helper functions on 32-bit systems 2008-04-29 10:40:44 -06:00
Joel Dice
d50e3aaee0 preserve operands to CombineEvent and TranslateEvent when necessary 2008-04-29 10:25:20 -06:00
Joel Dice
c96f44d77d don't skip move when MoveEvent is followed by a PushEvent which is not active; use existing register site in ValueSite when possible 2008-04-29 08:59:12 -06:00
Joel Dice
8738bddcb9 bugfixes, mainly concerning 32-bit machines 2008-04-28 16:08:31 -06:00
Joel Dice
1b5f14d847 re-enable tests in Misc and get them working 2008-04-28 09:53:48 -06:00
Joel Dice
9f8d77a2a9 Merge branch 'master' into compiler
Conflicts:

	src/compile.cpp
	src/compiler.cpp
	src/compiler.h
2008-04-27 16:40:53 -06:00
Joel Dice
5b7372a3bb various bugfixes; majority of tests now pass 2008-04-27 14:15:18 -06:00
Joel Dice
d5137a7cdf use stack instead of registers to save data across jumps and branches; bugfixes 2008-04-26 14:56:03 -06:00
Joel Dice
23572b58bd fix code ordering bug in MyProcessor::getStackTrace which caused the stack trace footprint calculation to be inaccurate 2008-04-25 16:18:19 -06:00
Joel Dice
0655b55378 resolve catch type for each exception handler during compilation 2008-04-24 16:06:36 -06:00
Joel Dice
1d7b00baff backport getstatic/putstatic optimization from compiler branch 2008-04-23 16:56:02 -06:00
Joel Dice
7e1a2ea876 don't remove nodes from call node table, since it leads to a race condition 2008-04-23 15:01:47 -06:00
Joel Dice
d072b71c39 nth attempt to clean up MyStackWalker 2008-04-23 10:33:31 -06:00
Joel Dice
9e8e4b3de7 fix stack walker to properly handle the case of a native method calling another native method 2008-04-22 10:21:54 -06:00
Joel Dice
c7d679467f handle case of visiting thread when it is executing one of the transition procedures 2008-04-22 09:31:40 -06:00
Joel Dice
df5258d1d8 various bugfixes concerning Thread.getStackTrace 2008-04-21 16:36:13 -06:00
Joel Dice
efb4e0241b do all java->native class via Compiler::indirectCall to ensure we can always make an accurate stack trace (part 2) 2008-04-21 11:31:10 -06:00
Joel Dice
8c450a75a1 do all java->native class via Compiler::indirectCall to ensure we can always make an accurate stack trace 2008-04-21 11:29:36 -06:00
Joel Dice
2289d13cbb make debug logging more concise 2008-04-20 18:20:38 -06:00
Joel Dice
d6c3b2327f bugfixes; enums test now succeeds 2008-04-20 13:35:36 -06:00
Joel Dice
61f866ce89 do a garbage collection in compile.cpp if throwing an exception that required creating a backup heap 2008-04-20 10:21:32 -06:00
Joel Dice
8ebff705d6 various fixes 2008-04-19 23:23:08 -06:00
Joel Dice
8baa2bbd87 insert stack sync events before each instruction with more than one predecessor 2008-04-19 18:43:12 -06:00
Joel Dice
50eb1cbb71 peek at stack values during bounds checks 2008-04-19 16:13:57 -06:00
Joel Dice
eb77687a57 hello, world 2008-04-19 15:52:45 -06:00
Joel Dice
7b8b7a7b11 snapshot 2008-04-19 14:41:31 -06:00
Joel Dice
b19c52b501 control flow bugfixes 2008-04-19 01:03:59 -06:00
Joel Dice
ab7314e526 more bugfixes 2008-04-18 18:19:45 -06:00
Joel Dice
44b3a7c36d various bugfixes 2008-04-17 22:16:20 -06:00
Joel Dice
a7134a2cd7 fix build 2008-04-17 16:07:32 -06:00
Joel Dice
df4a56d40c Merge branch 'compiler' of oss.readytalk.com:/var/local/git/avian 2008-04-16 11:16:36 -06:00
Joel Dice
479c48f1dd fix printf warning 2008-04-15 23:26:58 -06:00
Joel Dice
525f733171 Merge branch 'master' into compiler
Conflicts:

	src/compile.cpp
	src/compiler.cpp
	src/compiler.h
2008-04-13 13:48:20 -06:00
Joel Dice
0d3e6b7793 simplify memory allocation interfaces 2008-04-13 12:15:04 -06:00
Joel Dice
85712d183b fix stack walking from native methods 2008-04-11 18:06:04 -06:00
Joel Dice
aa9cb5c086 fix windows build 2008-04-11 17:01:17 -06:00
Joel Dice
f7a79f4874 fix frame object map size calculations 2008-04-11 15:00:18 -06:00
Joel Dice
bd618a51f6 translate exception handler table into a form which does not depend on the constant pool after JIT compiling a method 2008-04-11 13:03:40 -06:00
Joel Dice
2cf62a5926 various bugfixes in new stack trace code 2008-04-10 17:48:28 -06:00
Joel Dice
2d6eebf4d1 more progress on general stack tracing 2008-04-09 13:08:13 -06:00
Joel Dice
3fb90fdaa4 limit scope of lock acquisition in compileMethod2 2008-04-07 18:03:58 -06:00
Joel Dice
2c18ced808 use methodForIp in SegFaultHandler::handleSignal 2008-04-07 17:51:32 -06:00
Joel Dice
7ee29d4939 progress towards general stack trace support 2008-04-07 17:47:41 -06:00
Joel Dice
4102c97be3 fix bugs wrt calling methods via JNI 2008-04-01 11:37:59 -06:00
Joel Dice
9fe2cbff43 implement l2d and l2f byte codes 2008-03-20 18:37:58 -06:00
Joel Dice
a51c4cef39 bugfixes 2008-03-16 13:38:43 -06:00
Joel Dice
684b402e82 bugfixes and new instructions 2008-03-15 17:54:20 -06:00
Joel Dice
6bf0ca5bd9 various bugfixes and new instructions 2008-03-15 14:24:04 -06:00
Joel Dice
406f173982 handle constant array lengths and indexes properly; various bugfixes 2008-03-13 14:50:56 -06:00
Joel Dice
7cd79736c2 fix tracking of stack operations in compile.cpp 2008-03-11 10:57:35 -06:00
Joel Dice
9e2e614a15 various fixes to get invokevirtual working 2008-03-10 16:37:21 -06:00
Joel Dice
11dea0ad8e don't bother calling methods which are known do nothing 2008-03-10 07:28:21 -06:00
Joel Dice
7cfb89bd2a Merge branch 'master' into compiler 2008-03-09 11:31:55 -06:00
Joel Dice
9fe00836f7 fix stack mapping code to do as many passes as necessary
Previously, we had been doing exactly two passes over the event log to
caculate the stack object reference map at each trace point.  It turns
out the correct number of passes depends on how many incorrect
assumptions we make about what the stack looks like at instructions with
multiple predecessors (i.e. targets of jumps and branches).

Each time we detect we've made one or more incorrect assumptions during
a pass, we must do another pass to correct those assumptions.  That pass
may in turn reveal further incorrect assumptions, and so on.
2008-03-05 14:44:17 -07:00
Joel Dice
3317149cd2 Merge branch 'master' into compiler
Conflicts:

	src/x86.cpp
2008-02-26 17:56:35 -07:00
Joel Dice
2edaa82801 prepend copyright notice and license to all source files; add license.txt and readme.txt 2008-02-19 11:06:52 -07:00
Joel Dice
e8ed2a4749 various bugfixes in new compiler 2008-02-17 15:29:04 -07:00
Joel Dice
d654c943f3 various bugfixes and tweaks in new compiler, primarily related to duplicating stack operands 2008-02-17 13:57:40 -07:00
Joel Dice
fa513beb2f rework compiler interface to explicitly accept a size parameter for each operation where relevant 2008-02-11 19:06:12 -07:00
Joel Dice
b9fa7179d9 more work on new compiler; addition now works 2008-02-11 17:20:32 -07:00
Joel Dice
5b2f351f01 adapt compile.cpp to new compiler 2008-02-11 10:21:41 -07:00
Joel Dice
2346714d60 move local reference cleanup from invoke() to invokeNative2(), where it belonged all along 2008-02-01 14:17:54 -07:00
Joel Dice
eeac584474 fix thinko in invokeNative2 2008-01-30 17:08:47 -07:00
Joel Dice
008ac07079 refactor native method resolution to be simpler and more robust 2008-01-28 10:27:02 -07:00
Joel Dice
8150b957c9 support JIT compiling methods with unsorted exception handler tables 2008-01-25 17:17:27 -07:00
Joel Dice
c9714c73f2 fix frame map calculations involving exception handlers 2008-01-20 16:03:28 -07:00
Joel Dice
422133d1ba initialize vtables with pointers to JIT function, including native methods, since this allows code shrinkers to eliminate unused methods without confusing the VM 2008-01-20 15:05:59 -07:00
Joel Dice
a69c366d07 save 'this' pointer on entrance to synchronized, non-static, non-native methods so we can release the monitor on exit, reguardless of whether the pointer at local index zero is overwritten 2008-01-20 11:55:08 -07:00
Joel Dice
86bdd48a66 when invoking Java methods from native code on 32-bit systems, push 32-bit halves of 64-bit values in reverse order since they are reversed again when pushed on the stack 2008-01-15 18:01:11 -07:00
Joel Dice
d1b4dfccd0 fix class cast exception message thinko 2008-01-15 16:33:20 -07:00
Joel Dice
2f83468b80 remove context argument from Allocator::tryAllocate and Allocator::allocate, since we aren't using it after all 2008-01-14 16:37:24 -07:00
Joel Dice
e4c1f6cc8f protect local variable from GC in findUnwindTarget 2008-01-14 09:33:26 -07:00
Joel Dice
0298865efa refactor memory allocation to allow better detection and handling of low-memory conditions 2008-01-13 15:05:08 -07:00
Joel Dice
d1ec7cd0e8 remove debug logging 2008-01-11 15:19:44 -07:00
Joel Dice
f0d556b0ec fix handling of call target resolution for non-virtual calls 2008-01-11 15:16:24 -07:00
Joel Dice
570925ad0e handle locking for synchronized native methods 2008-01-11 10:49:11 -07:00
Joel Dice
13aaa14a41 use code allocator to allocate indirect caller 2008-01-09 18:51:58 -07:00
Joel Dice
8e5ce11047 refactor memory management code
We now support immortal objects, which the GC will scan for references
but not consider for collection.  On x86_64, we allocate JIT code memory
via mmap, which lets us map memory into the bottom 2GB of the address
space, ensuring that 32-bit relative jumps and calls work.
2008-01-09 18:20:36 -07:00
Joel Dice
811fbf0ab9 don't try to compile a method twice if it was compiled as a side-effect of initializing a class 2008-01-08 14:23:49 -07:00
Joel Dice
cfc959a3d2 invoke static initializers more lazily 2008-01-08 12:36:34 -07:00
Joel Dice
551addc638 make array bounds checking optional; add comments describing stack mapping algorithm 2008-01-08 10:10:24 -07:00
Joel Dice
c8472c4d30 minimize state tracked by stack mapping algorithm 2008-01-08 08:24:57 -07:00
Joel Dice
8dc674b3d2 remove redundant line in multianewarray 2008-01-07 16:09:55 -07:00
Joel Dice
72f7115323 add FORCE_ALIGN attribute to non-trivial functions called from Java land 2008-01-07 15:49:34 -07:00
Joel Dice
2cda000725 fix code ordering bug in compile() which caused us to calculate the stack map incorrectly; logging tweak 2008-01-07 15:04:53 -07:00
Joel Dice
259dd643e0 fix over-agressive state reset in state mapping code; logging tweaks 2008-01-07 14:32:41 -07:00
Joel Dice
25f12ca40a set Verbose=false 2008-01-07 10:16:41 -07:00
Joel Dice
888dce8f3c bugfixes and cleanups for new stack mapping code 2008-01-07 09:01:35 -07:00
Joel Dice
a755368add sketch of new stack mapping algorithm 2008-01-07 07:51:07 -07:00
Joel Dice
e30302722e Merge branch 'master' of dice.ecovate.com:git/vm
Conflicts:

	src/compile.cpp
2008-01-03 16:54:35 -07:00
Joel Dice
4bda925e08 fix thinko in Frame::mapSizeInWords; code cleanup 2008-01-03 16:53:37 -07:00
Joel Dice
ce2f5dd375 fix use of clobbered stack register in multianewarray 2008-01-03 14:28:29 -07:00
Joel Dice
2d6d69a573 fix thinko in invokeNative2 2008-01-03 12:49:07 -07:00
Joel Dice
651a27f73e sign-extend array indexes from 32 to 64 bits on amd64; provide useful messages for certain runtime exceptions 2008-01-03 11:37:00 -07:00
Joel Dice
1d7931a654 fix GC safety bugs in compile.cpp 2008-01-01 18:07:12 -07:00
Joel Dice
bdd62011eb fix up access violation handling on windows; refactor posix segv handling to match API change needed for windows 2008-01-01 10:08:47 -07:00
Joel Dice
100fc304ad sketch of windows access violation handling; posix segv handling bugfixes 2007-12-31 16:21:57 -07:00
Joel Dice
f151d85f4e intercept SIGSEGV and throw NullPointerExceptions 2007-12-31 15:40:56 -07:00
Joel Dice
069a760918 snapshot 2007-12-30 15:24:48 -07:00
Joel Dice
c147ef4e5c allow concurrent reads and writes on trace node hashtable, requiring only writes to acquire the the class lock 2007-12-28 09:50:26 -07:00
Joel Dice
5d65e7c220 handle synchronized methods properly in JIT mode 2007-12-27 17:02:05 -07:00
Joel Dice
bc44f468de set Verbose=false in compile.cpp 2007-12-27 13:33:58 -07:00
Joel Dice
00c095b564 pop address off stack in jsr instruction before compiling the code which follows 2007-12-27 13:32:34 -07:00
Joel Dice
ea2935f5f1 use storeObjectOrAddress in all astore* instructions 2007-12-27 09:02:03 -07:00
Joel Dice
848a67b397 implement jsr, jsr_w, and ret; various bugfixes to get SWT example working in JIT mode 2007-12-26 16:59:55 -07:00
Joel Dice
c0cf15bb37 add missing instructions and fix shift long instructions to pop an int instead of a long as the shift count 2007-12-26 12:19:45 -07:00
Joel Dice
b361e1b637 refactor JIT code to make operand size an explicit part of each applicable instruction 2007-12-26 09:56:14 -07:00
Joel Dice
8cd18d6193 more JIT bugfixes 2007-12-23 13:06:24 -07:00
Joel Dice
271797bead GC safety fix in resolveTarget 2007-12-23 12:26:35 -07:00