United StatesChange Country, Oracle Worldwide Web Sites Communities I am a... I want to...
Bug ID: JDK-7004925 CTW: assert(nbits == 32 || -(1 << nbits-1) <= x && x < ( 1 << nbits-1)) failed: value out of range
JDK-7004925 : CTW: assert(nbits == 32 || -(1 << nbits-1) <= x && x < ( 1 << nbits-1)) failed: value out of range

Details
Type:
Bug
Submit Date:
2010-12-06
Status:
Closed
Updated Date:
2011-03-08
Project Name:
JDK
Resolved Date:
2011-03-08
Component:
hotspot
OS:
solaris_10
Sub-Component:
compiler
CPU:
sparc
Priority:
P3
Resolution:
Fixed
Affected Versions:
hs20
Fixed Versions:
hs20 (b04)

Related Reports
Backport:
Backport:
Relates:

Sub Tasks

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/hotspot-comp/hotspot/rev/5fe0781a8560
                                     
2010-12-07
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.
                                     
2010-12-07
EVALUATION

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

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



Hardware and Software, Engineered to Work Together