Commit Graph

383 Commits

Author SHA1 Message Date
Joel Dice
5da8b96931 Merge remote branch 'origin/master' into r0.5 2010-12-21 15:28:34 -07:00
Joel Dice
857dcd13e7 fix 64-bit constant comparisons on 32-bit platforms 2010-12-20 18:08:52 -07:00
Joel Dice
306f1282d0 throw ArithmeticException on divide-by-zero 2010-12-19 17:47:21 -07:00
Joel Dice
d18240cbd6 check for stack overflow on entry to all non-leaf methods
We now check for stack overflow in the JIT build as well as the
interpreted build, throwing a StackOverflowError if the limit
(currently hard-coded to 64KB, but should be easy to make
configurable) is exceeded.
2010-12-19 15:23:19 -07:00
Joel Dice
314bdae80d freeze BranchEvent operands to ensure they aren't clobbered as temporaries 2010-12-07 18:16:19 -07:00
Joel Dice
378f7086b7 fix return address code offset calculation on ARM
We have to be careful about how we calculate return addresses on ARM
due to padding introduced by constant pools interspersed with code.
When calculating the offset of code where we're inserting a constant
pool, we want the offset of the end of the pool for jump targets, but
we want the offset just prior to the beginning of the pool (i.e. the
offset of the instruction responsible for jumping past the pool) when
calculating a return address.
2010-12-07 15:57:11 -07:00
Joel Dice
a5742f5985 update copyright years 2010-12-05 20:21:09 -07:00
Joel Dice
4f23601b56 fix corner cases which led to crashes in JIT compiler
Compiling the entire OpenJDK class library into a bootimage revealed
some corner cases which broke the compiler, including synchronization
in a finally block and gotos targeting the first instruction of an
unsynchronized method.
2010-11-26 12:36:43 -07:00
Joel Dice
a611ccda6f Merge remote branch 'origin/master' into openjdk
Conflicts:
	makefile
	src/compile.cpp
	src/compiler.cpp
	src/type-generator.cpp
2010-11-16 10:18:08 -07:00
Joel Dice
6bf74bf380 optimize loads of constant values by using PC-relative addressing on ARM
Previously, loading an arbitrary 32-bit constant required up to four
instructions (128 bytes), since we did so one byte at a time via
immediate-mode operations.

The preferred way to load constants on ARM is via PC-relative
addressing, but this is challenging because immediate memory offsets
are limited to 4096 bytes in either direction.  We frequently need to
compile methods which are larger than 4096, or even 8192, bytes, so we
must intersperse code and data if we want to use PC-relative loads
everywhere.

This commit enables pervasive PC-relative loads by handling the
following cases:

 1. Method is shorter than 4096 bytes: append data table to end

 2. Method is longer than 4096 bytes, but no basic block is longer
 than 4096 bytes: insert data tables as necessary after blocks, taking
 care to minimize the total number of tables

 3. Method is longer than 4096 bytes, and some blocks are longer than
 4096 bytes: split large basic blocks and insert data tables as above
2010-11-13 19:42:29 -07:00
Joel Dice
70fcbc2788 freeze index site in BoundsCheckEvent::compile
This ensures we don't use it as a temporary register when generating
the comparison.
2010-11-09 11:34:56 -07: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
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
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
7b2322e7f7 accept any source site in resolveTargetSites, whether it matches the next read or not 2009-12-24 17:47:58 -07:00
Joel Dice
b6ac05ba9d remove unecessary code from resolveSourceSites and resolveTargetSites 2009-12-05 15:49:53 -07:00
Joel Dice
3777c9b429 fix MSVC build 2009-12-02 08:49:10 -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
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
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
79d281f7fa encourage loads from memory directly into SSE registers where appropriate 2009-11-30 02:17:08 +00: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
4566e7a7dd avoid infinite loop in deadWord 2009-11-03 14:14:27 -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
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
95c3f37bfb fix various bugs involving doubles on 32-bit systems 2009-10-24 17:18:56 -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
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
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
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
1a0eef7e2d add support for building with MSVC on Windows 2009-08-26 18:26:44 -06:00
Josh warner
78ea4d20e3 added loneMatch to improve register allocation 2009-08-11 13:46:51 -06:00
Josh warner
cd59222f53 fixed propegation of result sizes 2009-08-11 13:27:25 -06:00
Josh warner
9910e310cb fixed register reserve logic in pickTarget 2009-08-10 13:42:37 -06:00