# HG changeset patch # User Jin # Date 1462474387 14400 # Node ID 26621fe12c4880a3d4a49025053ff89e7f084f4f # Parent 2d8a650513c2c3e6717fcbfe5d4f12abee5ff96b TemplateTable::_new(): fix unaligned lw InstanceKlass::init_state is defiend as "u2" and is assigned to 2-byte boundary. Its offset is 0x16a. Such field should be accessed with LHU. public class List { public static void main(String[] args) { List th; while(true) th = new List(); } } Effect: * -Xmixed / -Xint: no unaligned instructions diff -r 2d8a650513c2 -r 26621fe12c48 src/cpu/mips/vm/templateTable_mips_64.cpp --- a/src/cpu/mips/vm/templateTable_mips_64.cpp Fri Apr 29 00:06:10 2016 +0800 +++ b/src/cpu/mips/vm/templateTable_mips_64.cpp Thu May 05 14:53:07 2016 -0400 @@ -4016,7 +4016,7 @@ /*make sure klass is initialized & doesn't have finalizer*/ // make sure klass is fully initialized - __ lw(T1, T3, in_bytes(InstanceKlass::init_state_offset())); + __ lhu(T1, T3, in_bytes(InstanceKlass::init_state_offset())); __ daddiu(AT, T1, - (int)InstanceKlass::fully_initialized); __ bne(AT, R0, slow_case); __ delayed()->nop();