SUGGESTED FIX
###@###.### 2004-01-13
Disable the generation of 'bpr' instructions by setting the C2 flag
BranchOnRegister to false.
The instruction is rare since it is used only for comparison with 0 and
when several other conditions are met.
Also Paul Hohensee pointed out that on u3 "bpr is a lose in every way but
code space (1 instruction instead of 2). It uses the memory/special == MS pipe,
so it uses up a memory access issue slot, which the cmp/bcc pair doesn't.
Also, a cmp and bcc can issue in the same group, so I seriously doubt whether
there's any performance impact whatsoever."
|
EVALUATION
The problem is during code generation:
[6] report_assertion_failure(0xffffffff7da110dd, 0x313, 0xffffffff7da11133, 0x16ba284, 0x3, 0x40b8c), at 0xffffffff7d15b0b4
[7] Assembler::patched_branch(0xfffffffffffe0000, 0x2, 0x303fff, 0x20be0, 0x20be0, 0xac20000), at 0xffffffff7cf8f250
[8] AbstractAssembler::bind(0x20be0, 0x10035e5a8, 0xffffffff29ffd560, 0x55, 0x54, 0xffffffff7e649328), at 0xffffffff7cf8ec54
[9] Compile::Fill_buffer(0xffffffff29ffd560, 0xffffffff29ffe7d0, 0x10226a480, 0x20be0, 0x149c, 0xffffffff7e6f7bb8), at 0xffffffff7d719cfc
###@###.### 2003-12-09
We are using 'bpr' instruction on sparc which has only 16 bits for displacement.
The compiled method jdbcTest.dbmetadata.Keys::run has more the 50000 nodes.
And the size of generated code exceeds 2^16 instructions.
We have to use an other branch instruction when we have large offset.
###@###.### 2003-12-12
|