JDK-7004925 : CTW: assert(nbits == 32 || -(1 << nbits-1) <= x && x < ( 1 << nbits-1)) failed: value out of range
  • Type: Bug
  • Component: hotspot
  • Sub-Component: compiler
  • Affected Version: hs20
  • Priority: P3
  • Status: Closed
  • Resolution: Fixed
  • OS: solaris_10
  • CPU: sparc
  • Submitted: 2010-12-06
  • Updated: 2011-03-08
  • Resolved: 2011-03-08
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 6 JDK 7 Other
6u25Fixed 7Fixed hs20Fixed
Related Reports
Relates :  
Description
T2 sparcv9:

java -Xmx32m -XX:+AggressiveOpts -Xss4m  -XX:+CompileTheWorld -XX:CompileTheWorldStartAt=199 -Xbootclasspath/p:/net/sqenfs-1.sfbay/export1/comp/vm/testbase/CompileTheWorld/jarfiles/cjck.jar  
...

CompileTheWorld (218) : com/sun/javacard/cjck/tests/vm/instructionset/bytecode/minimal/Verify255Handlers
CompileTheWorld (219) : com/sun/javacard/cjck/tests/vm/instructionset/bytecode/minimal/Verify256Switch
# 
# A fatal error has been detected by the Java Runtime Environment: 
# 
#  Internal Error (/tmp/jprt/P1/B/201518.never/source/src/cpu/sparc/vm/assembler_sparc.hpp:852), pid=18184, tid=93 
#  assert(nbits == 32 || -(1 << nbits-1) <= x && x < ( 1 << nbits-1)) failed: value out of range 
# 
# JRE version: 7.0 
# Java VM: OpenJDK 64-Bit Server VM (20.0-b03-201012032015.never.7004530-fastdebug mixed mode solaris-sparc compressed oops) 
# If you would like to submit a bug report, please visit: 
#   http://java.sun.com/webapps/bugreport/crash.jsp 
# 
 
---------------  T H R E A D  --------------- 
 
Current thread (0x000000010598a000):  JavaThread "C2 CompilerThread1" daemon [_thread_in_native, id=93, stack(0xffffffff64a00000,0xffffffff64b00000)] 
 
Stack: [0xffffffff64a00000,0xffffffff64b00000],  sp=0xffffffff64afb600,  free space=1005k 
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) 
V  [libjvm.so+0xcd41bc] void VMError::report_and_die() + 0x734
V  [libjvm.so+0xcb4e58] void report_vm_error(const char*,int,const char*,const char*) + 0x78
V  [libjvm.so+0x3a3ec0] void Assembler::assert_signed_range(long,int) + 0x70
24456 exited.
V  [libjvm.so+0x12b519c] void jumpXtndNode::emit(CodeBuffer&,PhaseRegAlloc*)const + 0x1bc
V  [libjvm.so+0x11cebf0] void Compile::Fill_buffer() + 0xef8
V  [libjvm.so+0x1097234] void Compile::Code_Gen() + 0x868
V  [libjvm.so+0x1090068] Compile::Compile(ciEnv*,C2Compiler*,ciMethod*,int,bool,bool) + 0x10a8
V  [libjvm.so+0x104c9b8] void C2Compiler::compile_method(ciEnv*,ciMethod*,int) + 0xb0
V  [libjvm.so+0x3f9ca8] void CompileBroker::invoke_compiler_on_method(CompileTask*) + 0x1d70
V  [libjvm.so+0x3f7914] void CompileBroker::compiler_thread_loop() + 0xb24
V  [libjvm.so+0xc130d4] void JavaThread::thread_main_inner() + 0x1a4
V  [libjvm.so+0xc12f10] void JavaThread::run() + 0x248
V  [libjvm.so+0xcec8e0] java_start + 0x300
 
 
Current CompileTask: 
C2:  83782 341   b  com.sun.javacard.cjck.tests.vm.instructionset.bytecode.minimal.Verify256Switch.Check256LookupSwitch(S)S (2714 bytes) 

From debug build:

V  [libjvm.so+0x4e81d0] void Assembler::assert_signed_range(long,int) + 0xb8
V  [libjvm.so+0x4e788c] int Assembler::simm(int,int) + 0x24
V  [libjvm.so+0xb373b8] void Assembler::add(RegisterImpl*,int,RegisterImpl*,relocInfo::relocType) + 0x88
V  [libjvm.so+0x1034cf8] void jumpXtndNode::emit(CodeBuffer&,PhaseRegAlloc*)const + 0x1a0

Current function is Assembler::simm
  967       assert_signed_range(x, nbits);
[t@92 l@92]: print x
x = -11968

[t@92 l@92]: up
Current function is jumpXtndNode::emit
 9037         __ add($constanttablebase, $constantoffset, table_reg);

[t@92 l@92]: print this->constant_offset()
this->constant_offset() = -11968

[t@92 l@92]: print method()->print_codes()
0 iload_1
1 fast_binaryswitch 2712 300  0:2412, ...

Comments
EVALUATION http://hg.openjdk.java.net/jdk7/build/hotspot/rev/5fe0781a8560
25-12-2010

EVALUATION http://hg.openjdk.java.net/jdk7/hotspot/hotspot/rev/5fe0781a8560
16-12-2010

PUBLIC COMMENTS 6961690 changes did not take into account that on sparc an offset in constant table may not fit 13 bits. Set offset in register if it does not fit 13 bits. I have to reintroduce temp register in some instructions. We can't predicate on the offset since the constant table is generated when code is emitted, constants offsets are unknown during matching.
07-12-2010

EVALUATION http://hg.openjdk.java.net/jdk7/hotspot-comp/hotspot/rev/5fe0781a8560
07-12-2010