--- old/src/share/vm/c1/c1_Canonicalizer.cpp 2016-02-29 15:42:31.000000000 +0300 +++ new/src/share/vm/c1/c1_Canonicalizer.cpp 2016-02-29 15:42:31.000000000 +0300 @@ -257,7 +257,38 @@ } } -void Canonicalizer::do_LoadIndexed (LoadIndexed* x) {} +void Canonicalizer::do_LoadIndexed (LoadIndexed* x) { + StableArrayConstant* array = x->array()->type()->as_StableArrayConstant(); + IntConstant* index = x->index()->type()->as_IntConstant(); + + assert(array == NULL || FoldStableValues, "not enabled"); + + // Constant fold loads from stable arrays. + if (array != NULL && index != NULL) { + jint idx = index->value(); + if (idx < 0 || idx >= array->value()->length()) { + // Leave the load as is. The range check will handle it. + return; + } + + ciConstant field_val = array->value()->element_value(idx); + if (!field_val.is_null_or_zero()) { + jint dimension = array->dimension(); + assert(dimension <= array->value()->array_type()->dimension(), "inconsistent info"); + ValueType* value = NULL; + if (dimension > 1) { + // Preserve information about the dimension for the element. + assert(field_val.as_object()->is_array(), "not an array"); + value = new StableArrayConstant(field_val.as_object()->as_array(), dimension - 1); + } else { + assert(dimension == 1, "sanity"); + value = as_ValueType(field_val); + } + set_canonical(new Constant(value)); + } + } +} + void Canonicalizer::do_StoreIndexed (StoreIndexed* x) { // If a value is going to be stored into a field or array some of // the conversions emitted by javac are unneeded because the fields --- old/src/share/vm/c1/c1_GraphBuilder.cpp 2016-02-29 15:42:31.000000000 +0300 +++ new/src/share/vm/c1/c1_GraphBuilder.cpp 2016-02-29 15:42:31.000000000 +0300 @@ -1519,6 +1519,29 @@ append(new Return(x)); } +Value GraphBuilder::make_constant(ciConstant field_value, ciField* field) { + BasicType field_type = field_value.basic_type(); + ValueType* value = as_ValueType(field_value); + + // Attach dimension info to stable arrays. + if (FoldStableValues && + field->is_stable() && field_type == T_ARRAY && !field_value.is_null_or_zero()) { + ciArray* array = field_value.as_object()->as_array(); + jint dimension = field->type()->as_array_klass()->dimension(); + value = new StableArrayConstant(array, dimension); + } + + switch (field_type) { + case T_ARRAY: + case T_OBJECT: + if (field_value.as_object()->should_be_constant()) { + return new Constant(value); + } + return NULL; // Not a constant. + default: + return new Constant(value); + } +} void GraphBuilder::access_field(Bytecodes::Code code) { bool will_link; @@ -1563,22 +1586,13 @@ switch (code) { case Bytecodes::_getstatic: { // check for compile-time constants, i.e., initialized static final fields - Instruction* constant = NULL; + Value constant = NULL; if (field->is_constant() && !PatchALot) { - ciConstant field_val = field->constant_value(); - BasicType field_type = field_val.basic_type(); - switch (field_type) { - case T_ARRAY: - case T_OBJECT: - if (field_val.as_object()->should_be_constant()) { - constant = new Constant(as_ValueType(field_val)); - } - break; - - default: - constant = new Constant(as_ValueType(field_val)); - } + ciConstant field_value = field->constant_value(); // Stable static fields are checked for non-default values in ciField::initialize_from(). + assert(!field->is_stable() || !field_value.is_null_or_zero(), + "stable static w/ default value shouldn't be a constant"); + constant = make_constant(field_value, field); } if (constant != NULL) { push(type, append(constant)); @@ -1591,38 +1605,29 @@ } break; } - case Bytecodes::_putstatic: - { Value val = pop(type); - if (state_before == NULL) { - state_before = copy_state_for_exception(); - } - append(new StoreField(append(obj), offset, field, val, true, state_before, needs_patching)); + case Bytecodes::_putstatic: { + Value val = pop(type); + if (state_before == NULL) { + state_before = copy_state_for_exception(); } + append(new StoreField(append(obj), offset, field, val, true, state_before, needs_patching)); break; + } case Bytecodes::_getfield: { // Check for compile-time constants, i.e., trusted final non-static fields. - Instruction* constant = NULL; + Value constant = NULL; obj = apop(); ObjectType* obj_type = obj->type()->as_ObjectType(); if (obj_type->is_constant() && !PatchALot) { ciObject* const_oop = obj_type->constant_value(); if (!const_oop->is_null_object() && const_oop->is_loaded()) { if (field->is_constant()) { - ciConstant field_val = field->constant_value_of(const_oop); - BasicType field_type = field_val.basic_type(); - switch (field_type) { - case T_ARRAY: - case T_OBJECT: - if (field_val.as_object()->should_be_constant()) { - constant = new Constant(as_ValueType(field_val)); - } - break; - default: - constant = new Constant(as_ValueType(field_val)); - } - if (FoldStableValues && field->is_stable() && field_val.is_null_or_zero()) { + ciConstant field_value = field->constant_value_of(const_oop); + if (FoldStableValues && field->is_stable() && field_value.is_null_or_zero()) { // Stable field with default value can't be constant. constant = NULL; + } else { + constant = make_constant(field_value, field); } } else { // For CallSite objects treat the target field as a compile time constant. --- old/src/share/vm/c1/c1_GraphBuilder.hpp 2016-02-29 15:42:32.000000000 +0300 +++ new/src/share/vm/c1/c1_GraphBuilder.hpp 2016-02-29 15:42:31.000000000 +0300 @@ -276,6 +276,7 @@ void iterate_all_blocks(bool start_in_current_block_for_inlining = false); Dependencies* dependency_recorder() const; // = compilation()->dependencies() bool direct_compare(ciKlass* k); + Value make_constant(ciConstant value, ciField* field); void kill_all(); --- old/src/share/vm/c1/c1_ValueType.hpp 2016-02-29 15:42:32.000000000 +0300 +++ new/src/share/vm/c1/c1_ValueType.hpp 2016-02-29 15:42:32.000000000 +0300 @@ -45,6 +45,7 @@ class ObjectConstant; class ArrayType; class ArrayConstant; +class StableArrayConstant; class InstanceType; class InstanceConstant; class MetadataType; @@ -168,6 +169,7 @@ virtual MethodConstant* as_MethodConstant() { return NULL; } virtual MethodDataConstant* as_MethodDataConstant() { return NULL; } virtual ArrayConstant* as_ArrayConstant() { return NULL; } + virtual StableArrayConstant* as_StableArrayConstant() { return NULL; } virtual AddressConstant* as_AddressConstant() { return NULL; } // type operations @@ -355,6 +357,20 @@ virtual ciType* exact_type() const; }; +class StableArrayConstant: public ArrayConstant { + private: + jint _dimension; + + public: + StableArrayConstant(ciArray* value, jint dimension) : ArrayConstant(value) { + assert(dimension > 0, "not a stable array"); + _dimension = dimension; + } + + jint dimension() const { return _dimension; } + + virtual StableArrayConstant* as_StableArrayConstant() { return this; } +}; class InstanceType: public ObjectType { public: --- old/src/share/vm/opto/library_call.cpp 2016-02-29 15:42:32.000000000 +0300 +++ new/src/share/vm/opto/library_call.cpp 2016-02-29 15:42:32.000000000 +0300 @@ -2541,10 +2541,12 @@ if (alias_type->element() != NULL || alias_type->field() != NULL) { BasicType bt; if (alias_type->element() != NULL) { - const Type* element = alias_type->element(); + // Use address type to get the element type. Alias type doesn't provide + // enough information (e.g., doesn't differentiate between byte[] and boolean[]). + const Type* element = adr_type->is_aryptr()->elem(); bt = element->isa_narrowoop() ? T_OBJECT : element->array_element_basic_type(); } else { - bt = alias_type->field()->type()->basic_type(); + bt = alias_type->field()->layout_type(); } if (bt == T_ARRAY) { // accessing an array field with getObject is not a mismatch @@ -2561,7 +2563,7 @@ // Try to constant fold a load from a constant field ciField* field = alias_type->field(); if (heap_base_oop != top() && - field != NULL && field->is_constant() && field->layout_type() == type) { + field != NULL && field->is_constant() && !mismatched) { // final or stable field const Type* con_type = Type::make_constant(alias_type->field(), heap_base_oop); if (con_type != NULL) { --- old/src/share/vm/opto/memnode.cpp 2016-02-29 15:42:33.000000000 +0300 +++ new/src/share/vm/opto/memnode.cpp 2016-02-29 15:42:33.000000000 +0300 @@ -1582,14 +1582,22 @@ return NULL; } +#ifdef ASSERT static bool is_mismatched_access(ciConstant con, BasicType loadbt) { BasicType conbt = con.basic_type(); - assert(conbt != T_NARROWOOP, "sanity"); - if (loadbt == T_NARROWOOP || loadbt == T_ARRAY) { - loadbt = T_OBJECT; + switch (conbt) { + case T_BOOLEAN: conbt = T_BYTE; break; + case T_ARRAY: conbt = T_OBJECT; break; + } + switch (loadbt) { + case T_BOOLEAN: loadbt = T_BYTE; break; + case T_NARROWOOP: loadbt = T_OBJECT; break; + case T_ARRAY: loadbt = T_OBJECT; break; + case T_ADDRESS: loadbt = T_OBJECT; break; } return (conbt != loadbt); } +#endif // ASSERT // Try to constant-fold a stable array element. static const Type* fold_stable_ary_elem(const TypeAryPtr* ary, int off, BasicType loadbt) { @@ -1599,7 +1607,9 @@ // Decode the results of GraphKit::array_element_address. ciArray* aobj = ary->const_oop()->as_array(); ciConstant con = aobj->element_value_by_offset(off); - if (con.basic_type() != T_ILLEGAL && !is_mismatched_access(con, loadbt) && !con.is_null_or_zero()) { + if (con.basic_type() != T_ILLEGAL && !con.is_null_or_zero()) { + assert(!is_mismatched_access(con, loadbt), + "conbt=%s; loadbt=%s", type2name(con.basic_type()), type2name(loadbt)); const Type* con_type = Type::make_from_constant(con); if (con_type != NULL) { if (con_type->isa_aryptr()) { --- old/test/compiler/stable/StableConfiguration.java 2016-02-29 15:42:34.000000000 +0300 +++ new/test/compiler/stable/StableConfiguration.java 2016-02-29 15:42:34.000000000 +0300 @@ -31,54 +31,10 @@ public class StableConfiguration { static final WhiteBox WB = WhiteBox.getWhiteBox(); static final boolean isStableEnabled; - static final boolean isServerWithStable; static { Boolean value = WB.getBooleanVMFlag("FoldStableValues"); isStableEnabled = (value == null ? false : value); - isServerWithStable = isStableEnabled && get(); System.out.println("@Stable: " + (isStableEnabled ? "enabled" : "disabled")); - System.out.println("Server Compiler: " + get()); } - - // The method 'get' below returns true if the method is server compiled - // and is used by the Stable tests to determine whether methods in - // general are being server compiled or not as the -XX:+FoldStableValues - // option is only applicable to -server. - // - // On aarch64 we DeOptimize when patching. This means that when the - // method is compiled as a result of -Xcomp it DeOptimizes immediately. - // The result is that getMethodCompilationLevel returns 0. This means - // the method returns true based on java.vm.name. - // - // However when the tests are run with -XX:+TieredCompilation and - // -XX:TieredStopAtLevel=1 this fails because methods will always - // be client compiled. - // - // Solution is to add a simple method 'get1' which should never be - // DeOpted and use that to determine the compilation level instead. - static void get1() { - } - - - - // ::get() is among immediately compiled methods. - static boolean get() { - try { - get1(); - Method m = StableConfiguration.class.getDeclaredMethod("get1"); - int level = WB.getMethodCompilationLevel(m); - if (level > 0) { - return (level == 4); - } else { - String javaVM = System.getProperty("java.vm.name", ""); - if (javaVM.contains("Server")) return true; - if (javaVM.contains("Client")) return false; - throw new Error("Unknown VM type: "+javaVM); - } - } catch (NoSuchMethodException e) { - throw new Error(e); - } - } - } --- old/test/compiler/stable/TestStableBoolean.java 2016-02-29 15:42:34.000000000 +0300 +++ new/test/compiler/stable/TestStableBoolean.java 2016-02-29 15:42:34.000000000 +0300 @@ -87,8 +87,7 @@ import java.lang.reflect.InvocationTargetException; public class TestStableBoolean { - static final boolean isStableEnabled = StableConfiguration.isStableEnabled; - static final boolean isServerWithStable = StableConfiguration.isServerWithStable; + static final boolean isStableEnabled = StableConfiguration.isStableEnabled; public static void main(String[] args) throws Exception { run(DefaultValue.class); @@ -209,14 +208,14 @@ c.v = new boolean[1]; c.v[0] = true; boolean val1 = get(); c.v[0] = false; boolean val2 = get(); assertEquals(val1, true); - assertEquals(val2, (isServerWithStable ? true : false)); + assertEquals(val2, (isStableEnabled ? true : false)); } { c.v = new boolean[20]; c.v[10] = true; boolean val1 = get1(); c.v[10] = false; boolean val2 = get1(); assertEquals(val1, true); - assertEquals(val2, (isServerWithStable ? true : false)); + assertEquals(val2, (isStableEnabled ? true : false)); } { @@ -241,19 +240,19 @@ c.v = new boolean[1][1]; c.v[0][0] = true; boolean val1 = get(); c.v[0][0] = false; boolean val2 = get(); assertEquals(val1, true); - assertEquals(val2, (isServerWithStable ? true : false)); + assertEquals(val2, (isStableEnabled ? true : false)); c.v = new boolean[1][1]; c.v[0][0] = false; boolean val3 = get(); - assertEquals(val3, (isServerWithStable ? true : false)); + assertEquals(val3, (isStableEnabled ? true : false)); c.v[0] = new boolean[1]; c.v[0][0] = false; boolean val4 = get(); - assertEquals(val4, (isServerWithStable ? true : false)); + assertEquals(val4, (isStableEnabled ? true : false)); } { c.v = new boolean[1][1]; boolean[] val1 = get1(); c.v[0] = new boolean[1]; boolean[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -279,28 +278,28 @@ c.v = new boolean[1][1][1]; c.v[0][0][0] = true; boolean val1 = get(); c.v[0][0][0] = false; boolean val2 = get(); assertEquals(val1, true); - assertEquals(val2, (isServerWithStable ? true : false)); + assertEquals(val2, (isStableEnabled ? true : false)); c.v = new boolean[1][1][1]; c.v[0][0][0] = false; boolean val3 = get(); - assertEquals(val3, (isServerWithStable ? true : false)); + assertEquals(val3, (isStableEnabled ? true : false)); c.v[0] = new boolean[1][1]; c.v[0][0][0] = false; boolean val4 = get(); - assertEquals(val4, (isServerWithStable ? true : false)); + assertEquals(val4, (isStableEnabled ? true : false)); c.v[0][0] = new boolean[1]; c.v[0][0][0] = false; boolean val5 = get(); - assertEquals(val5, (isServerWithStable ? true : false)); + assertEquals(val5, (isStableEnabled ? true : false)); } { c.v = new boolean[1][1][1]; boolean[] val1 = get1(); c.v[0][0] = new boolean[1]; boolean[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { c.v = new boolean[1][1][1]; boolean[][] val1 = get2(); c.v[0] = new boolean[1][1]; boolean[][] val2 = get2(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -327,37 +326,37 @@ c.v = new boolean[1][1][1][1]; c.v[0][0][0][0] = true; boolean val1 = get(); c.v[0][0][0][0] = false; boolean val2 = get(); assertEquals(val1, true); - assertEquals(val2, (isServerWithStable ? true : false)); + assertEquals(val2, (isStableEnabled ? true : false)); c.v = new boolean[1][1][1][1]; c.v[0][0][0][0] = false; boolean val3 = get(); - assertEquals(val3, (isServerWithStable ? true : false)); + assertEquals(val3, (isStableEnabled ? true : false)); c.v[0] = new boolean[1][1][1]; c.v[0][0][0][0] = false; boolean val4 = get(); - assertEquals(val4, (isServerWithStable ? true : false)); + assertEquals(val4, (isStableEnabled ? true : false)); c.v[0][0] = new boolean[1][1]; c.v[0][0][0][0] = false; boolean val5 = get(); - assertEquals(val5, (isServerWithStable ? true : false)); + assertEquals(val5, (isStableEnabled ? true : false)); c.v[0][0][0] = new boolean[1]; c.v[0][0][0][0] = false; boolean val6 = get(); - assertEquals(val6, (isServerWithStable ? true : false)); + assertEquals(val6, (isStableEnabled ? true : false)); } { c.v = new boolean[1][1][1][1]; boolean[] val1 = get1(); c.v[0][0][0] = new boolean[1]; boolean[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { c.v = new boolean[1][1][1][1]; boolean[][] val1 = get2(); c.v[0][0] = new boolean[1][1]; boolean[][] val2 = get2(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { c.v = new boolean[1][1][1][1]; boolean[][][] val1 = get3(); c.v[0] = new boolean[1][1][1]; boolean[][][] val2 = get3(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -420,7 +419,7 @@ c.v = new boolean[1][1]; c.v[0] = new boolean[0]; boolean[] val1 = get1(); c.v[0] = new boolean[0]; boolean[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -456,14 +455,14 @@ c.v = new boolean[1][1][1]; c.v[0][0] = new boolean[0]; boolean[] val1 = get1(); c.v[0][0] = new boolean[0]; boolean[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { c.v = new boolean[1][1][1]; c.v[0] = new boolean[0][0]; boolean[][] val1 = get2(); c.v[0] = new boolean[0][0]; boolean[][] val2 = get2(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -598,7 +597,7 @@ elem.a = false; boolean val3 = get(); boolean val4 = get1(); assertEquals(val1, true); - assertEquals(val3, (isServerWithStable ? true : false)); + assertEquals(val3, (isStableEnabled ? true : false)); assertEquals(val2, true); assertEquals(val4, false); --- old/test/compiler/stable/TestStableByte.java 2016-02-29 15:42:34.000000000 +0300 +++ new/test/compiler/stable/TestStableByte.java 2016-02-29 15:42:34.000000000 +0300 @@ -88,7 +88,6 @@ public class TestStableByte { static final boolean isStableEnabled = StableConfiguration.isStableEnabled; - static final boolean isServerWithStable = StableConfiguration.isServerWithStable; public static void main(String[] args) throws Exception { run(DefaultValue.class); @@ -209,10 +208,10 @@ c.v = new byte[1]; c.v[0] = 1; byte val1 = get(); c.v[0] = 2; byte val2 = get(); assertEquals(val1, 1); - assertEquals(val2, (isServerWithStable ? 1 : 2)); + assertEquals(val2, (isStableEnabled ? 1 : 2)); c.v = new byte[1]; c.v[0] = 3; byte val3 = get(); - assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 3)); } @@ -220,10 +219,10 @@ c.v = new byte[20]; c.v[10] = 1; byte val1 = get1(); c.v[10] = 2; byte val2 = get1(); assertEquals(val1, 1); - assertEquals(val2, (isServerWithStable ? 1 : 2)); + assertEquals(val2, (isStableEnabled ? 1 : 2)); c.v = new byte[20]; c.v[10] = 3; byte val3 = get1(); - assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 3)); } @@ -249,21 +248,21 @@ c.v = new byte[1][1]; c.v[0][0] = 1; byte val1 = get(); c.v[0][0] = 2; byte val2 = get(); assertEquals(val1, 1); - assertEquals(val2, (isServerWithStable ? 1 : 2)); + assertEquals(val2, (isStableEnabled ? 1 : 2)); c.v = new byte[1][1]; c.v[0][0] = 3; byte val3 = get(); - assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 3)); c.v[0] = new byte[1]; c.v[0][0] = 4; byte val4 = get(); - assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val4, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 4)); } { c.v = new byte[1][1]; byte[] val1 = get1(); c.v[0] = new byte[1]; byte[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -289,31 +288,31 @@ c.v = new byte[1][1][1]; c.v[0][0][0] = 1; byte val1 = get(); c.v[0][0][0] = 2; byte val2 = get(); assertEquals(val1, 1); - assertEquals(val2, (isServerWithStable ? 1 : 2)); + assertEquals(val2, (isStableEnabled ? 1 : 2)); c.v = new byte[1][1][1]; c.v[0][0][0] = 3; byte val3 = get(); - assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 3)); c.v[0] = new byte[1][1]; c.v[0][0][0] = 4; byte val4 = get(); - assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val4, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 4)); c.v[0][0] = new byte[1]; c.v[0][0][0] = 5; byte val5 = get(); - assertEquals(val5, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val5, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 5)); } { c.v = new byte[1][1][1]; byte[] val1 = get1(); c.v[0][0] = new byte[1]; byte[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { c.v = new byte[1][1][1]; byte[][] val1 = get2(); c.v[0] = new byte[1][1]; byte[][] val2 = get2(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -340,41 +339,41 @@ c.v = new byte[1][1][1][1]; c.v[0][0][0][0] = 1; byte val1 = get(); c.v[0][0][0][0] = 2; byte val2 = get(); assertEquals(val1, 1); - assertEquals(val2, (isServerWithStable ? 1 : 2)); + assertEquals(val2, (isStableEnabled ? 1 : 2)); c.v = new byte[1][1][1][1]; c.v[0][0][0][0] = 3; byte val3 = get(); - assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 3)); c.v[0] = new byte[1][1][1]; c.v[0][0][0][0] = 4; byte val4 = get(); - assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val4, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 4)); c.v[0][0] = new byte[1][1]; c.v[0][0][0][0] = 5; byte val5 = get(); - assertEquals(val5, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val5, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 5)); c.v[0][0][0] = new byte[1]; c.v[0][0][0][0] = 6; byte val6 = get(); - assertEquals(val6, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val6, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 6)); } { c.v = new byte[1][1][1][1]; byte[] val1 = get1(); c.v[0][0][0] = new byte[1]; byte[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { c.v = new byte[1][1][1][1]; byte[][] val1 = get2(); c.v[0][0] = new byte[1][1]; byte[][] val2 = get2(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { c.v = new byte[1][1][1][1]; byte[][][] val1 = get3(); c.v[0] = new byte[1][1][1]; byte[][][] val2 = get3(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -436,7 +435,7 @@ c.v = new byte[1][1]; c.v[0] = new byte[0]; byte[] val1 = get1(); c.v[0] = new byte[0]; byte[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -472,14 +471,14 @@ c.v = new byte[1][1][1]; c.v[0][0] = new byte[0]; byte[] val1 = get1(); c.v[0][0] = new byte[0]; byte[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { c.v = new byte[1][1][1]; c.v[0] = new byte[0][0]; byte[][] val1 = get2(); c.v[0] = new byte[0][0]; byte[][] val2 = get2(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -614,7 +613,7 @@ elem.a = 2; byte val3 = get(); byte val4 = get1(); assertEquals(val1, 1); - assertEquals(val3, (isServerWithStable ? 1 : 2)); + assertEquals(val3, (isStableEnabled ? 1 : 2)); assertEquals(val2, 1); assertEquals(val4, 2); --- old/test/compiler/stable/TestStableChar.java 2016-02-29 15:42:35.000000000 +0300 +++ new/test/compiler/stable/TestStableChar.java 2016-02-29 15:42:35.000000000 +0300 @@ -88,7 +88,6 @@ public class TestStableChar { static final boolean isStableEnabled = StableConfiguration.isStableEnabled; - static final boolean isServerWithStable = StableConfiguration.isServerWithStable; public static void main(String[] args) throws Exception { run(DefaultValue.class); @@ -209,10 +208,10 @@ c.v = new char[1]; c.v[0] = 'a'; char val1 = get(); c.v[0] = 'b'; char val2 = get(); assertEquals(val1, 'a'); - assertEquals(val2, (isServerWithStable ? 'a' : 'b')); + assertEquals(val2, (isStableEnabled ? 'a' : 'b')); c.v = new char[1]; c.v[0] = 'c'; char val3 = get(); - assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 'a' : 'b') + assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 'a' : 'b') : 'c')); } @@ -220,10 +219,10 @@ c.v = new char[20]; c.v[10] = 'a'; char val1 = get1(); c.v[10] = 'b'; char val2 = get1(); assertEquals(val1, 'a'); - assertEquals(val2, (isServerWithStable ? 'a' : 'b')); + assertEquals(val2, (isStableEnabled ? 'a' : 'b')); c.v = new char[20]; c.v[10] = 'c'; char val3 = get1(); - assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 'a' : 'b') + assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 'a' : 'b') : 'c')); } @@ -249,21 +248,21 @@ c.v = new char[1][1]; c.v[0][0] = 'a'; char val1 = get(); c.v[0][0] = 'b'; char val2 = get(); assertEquals(val1, 'a'); - assertEquals(val2, (isServerWithStable ? 'a' : 'b')); + assertEquals(val2, (isStableEnabled ? 'a' : 'b')); c.v = new char[1][1]; c.v[0][0] = 'c'; char val3 = get(); - assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 'a' : 'b') + assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 'a' : 'b') : 'c')); c.v[0] = new char[1]; c.v[0][0] = 'd'; char val4 = get(); - assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 'a' : 'b') + assertEquals(val4, (isStableEnabled ? (isStableEnabled ? 'a' : 'b') : 'd')); } { c.v = new char[1][1]; char[] val1 = get1(); c.v[0] = new char[1]; char[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -289,31 +288,31 @@ c.v = new char[1][1][1]; c.v[0][0][0] = 'a'; char val1 = get(); c.v[0][0][0] = 'b'; char val2 = get(); assertEquals(val1, 'a'); - assertEquals(val2, (isServerWithStable ? 'a' : 'b')); + assertEquals(val2, (isStableEnabled ? 'a' : 'b')); c.v = new char[1][1][1]; c.v[0][0][0] = 'c'; char val3 = get(); - assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 'a' : 'b') + assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 'a' : 'b') : 'c')); c.v[0] = new char[1][1]; c.v[0][0][0] = 'd'; char val4 = get(); - assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 'a' : 'b') + assertEquals(val4, (isStableEnabled ? (isStableEnabled ? 'a' : 'b') : 'd')); c.v[0][0] = new char[1]; c.v[0][0][0] = 'e'; char val5 = get(); - assertEquals(val5, (isStableEnabled ? (isServerWithStable ? 'a' : 'b') + assertEquals(val5, (isStableEnabled ? (isStableEnabled ? 'a' : 'b') : 'e')); } { c.v = new char[1][1][1]; char[] val1 = get1(); c.v[0][0] = new char[1]; char[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { c.v = new char[1][1][1]; char[][] val1 = get2(); c.v[0] = new char[1][1]; char[][] val2 = get2(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -340,41 +339,41 @@ c.v = new char[1][1][1][1]; c.v[0][0][0][0] = 'a'; char val1 = get(); c.v[0][0][0][0] = 'b'; char val2 = get(); assertEquals(val1, 'a'); - assertEquals(val2, (isServerWithStable ? 'a' : 'b')); + assertEquals(val2, (isStableEnabled ? 'a' : 'b')); c.v = new char[1][1][1][1]; c.v[0][0][0][0] = 'c'; char val3 = get(); - assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 'a' : 'b') + assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 'a' : 'b') : 'c')); c.v[0] = new char[1][1][1]; c.v[0][0][0][0] = 'd'; char val4 = get(); - assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 'a' : 'b') + assertEquals(val4, (isStableEnabled ? (isStableEnabled ? 'a' : 'b') : 'd')); c.v[0][0] = new char[1][1]; c.v[0][0][0][0] = 'e'; char val5 = get(); - assertEquals(val5, (isStableEnabled ? (isServerWithStable ? 'a' : 'b') + assertEquals(val5, (isStableEnabled ? (isStableEnabled ? 'a' : 'b') : 'e')); c.v[0][0][0] = new char[1]; c.v[0][0][0][0] = 'f'; char val6 = get(); - assertEquals(val6, (isStableEnabled ? (isServerWithStable ? 'a' : 'b') + assertEquals(val6, (isStableEnabled ? (isStableEnabled ? 'a' : 'b') : 'f')); } { c.v = new char[1][1][1][1]; char[] val1 = get1(); c.v[0][0][0] = new char[1]; char[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { c.v = new char[1][1][1][1]; char[][] val1 = get2(); c.v[0][0] = new char[1][1]; char[][] val2 = get2(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { c.v = new char[1][1][1][1]; char[][][] val1 = get3(); c.v[0] = new char[1][1][1]; char[][][] val2 = get3(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -434,7 +433,7 @@ c.v = new char[1][1]; c.v[0] = new char[0]; char[] val1 = get1(); c.v[0] = new char[0]; char[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -470,14 +469,14 @@ c.v = new char[1][1][1]; c.v[0][0] = new char[0]; char[] val1 = get1(); c.v[0][0] = new char[0]; char[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { c.v = new char[1][1][1]; c.v[0] = new char[0][0]; char[][] val1 = get2(); c.v[0] = new char[0][0]; char[][] val2 = get2(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -612,7 +611,7 @@ elem.a = 'b'; char val3 = get(); char val4 = get1(); assertEquals(val1, 'a'); - assertEquals(val3, (isServerWithStable ? 'a' : 'b')); + assertEquals(val3, (isStableEnabled ? 'a' : 'b')); assertEquals(val2, 'a'); assertEquals(val4, 'b'); --- old/test/compiler/stable/TestStableDouble.java 2016-02-29 15:42:35.000000000 +0300 +++ new/test/compiler/stable/TestStableDouble.java 2016-02-29 15:42:35.000000000 +0300 @@ -88,7 +88,6 @@ public class TestStableDouble { static final boolean isStableEnabled = StableConfiguration.isStableEnabled; - static final boolean isServerWithStable = StableConfiguration.isServerWithStable; public static void main(String[] args) throws Exception { run(DefaultValue.class); @@ -209,10 +208,10 @@ c.v = new double[1]; c.v[0] = 1.0; double val1 = get(); c.v[0] = 2.0; double val2 = get(); assertEquals(val1, 1.0); - assertEquals(val2, (isServerWithStable ? 1.0 : 2.0)); + assertEquals(val2, (isStableEnabled ? 1.0 : 2.0)); c.v = new double[1]; c.v[0] = 3.0; double val3 = get(); - assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1.0 : 2.0) + assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 1.0 : 2.0) : 3.0)); } @@ -220,10 +219,10 @@ c.v = new double[20]; c.v[10] = 1.0; double val1 = get1(); c.v[10] = 2.0; double val2 = get1(); assertEquals(val1, 1.0); - assertEquals(val2, (isServerWithStable ? 1.0 : 2.0)); + assertEquals(val2, (isStableEnabled ? 1.0 : 2.0)); c.v = new double[20]; c.v[10] = 3.0; double val3 = get1(); - assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1.0 : 2.0) + assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 1.0 : 2.0) : 3.0)); } @@ -249,21 +248,21 @@ c.v = new double[1][1]; c.v[0][0] = 1.0; double val1 = get(); c.v[0][0] = 2.0; double val2 = get(); assertEquals(val1, 1.0); - assertEquals(val2, (isServerWithStable ? 1.0 : 2.0)); + assertEquals(val2, (isStableEnabled ? 1.0 : 2.0)); c.v = new double[1][1]; c.v[0][0] = 3.0; double val3 = get(); - assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1.0 : 2.0) + assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 1.0 : 2.0) : 3.0)); c.v[0] = new double[1]; c.v[0][0] = 4.0; double val4 = get(); - assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 1.0 : 2.0) + assertEquals(val4, (isStableEnabled ? (isStableEnabled ? 1.0 : 2.0) : 4.0)); } { c.v = new double[1][1]; double[] val1 = get1(); c.v[0] = new double[1]; double[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -289,31 +288,31 @@ c.v = new double[1][1][1]; c.v[0][0][0] = 1.0; double val1 = get(); c.v[0][0][0] = 2.0; double val2 = get(); assertEquals(val1, 1.0); - assertEquals(val2, (isServerWithStable ? 1.0 : 2.0)); + assertEquals(val2, (isStableEnabled ? 1.0 : 2.0)); c.v = new double[1][1][1]; c.v[0][0][0] = 3.0; double val3 = get(); - assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1.0 : 2.0) + assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 1.0 : 2.0) : 3.0)); c.v[0] = new double[1][1]; c.v[0][0][0] = 4.0; double val4 = get(); - assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 1.0 : 2.0) + assertEquals(val4, (isStableEnabled ? (isStableEnabled ? 1.0 : 2.0) : 4.0)); c.v[0][0] = new double[1]; c.v[0][0][0] = 5.0; double val5 = get(); - assertEquals(val5, (isStableEnabled ? (isServerWithStable ? 1.0 : 2.0) + assertEquals(val5, (isStableEnabled ? (isStableEnabled ? 1.0 : 2.0) : 5.0)); } { c.v = new double[1][1][1]; double[] val1 = get1(); c.v[0][0] = new double[1]; double[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { c.v = new double[1][1][1]; double[][] val1 = get2(); c.v[0] = new double[1][1]; double[][] val2 = get2(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -340,41 +339,41 @@ c.v = new double[1][1][1][1]; c.v[0][0][0][0] = 1.0; double val1 = get(); c.v[0][0][0][0] = 2.0; double val2 = get(); assertEquals(val1, 1.0); - assertEquals(val2, (isServerWithStable ? 1.0 : 2.0)); + assertEquals(val2, (isStableEnabled ? 1.0 : 2.0)); c.v = new double[1][1][1][1]; c.v[0][0][0][0] = 3.0; double val3 = get(); - assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1.0 : 2.0) + assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 1.0 : 2.0) : 3.0)); c.v[0] = new double[1][1][1]; c.v[0][0][0][0] = 4.0; double val4 = get(); - assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 1.0 : 2.0) + assertEquals(val4, (isStableEnabled ? (isStableEnabled ? 1.0 : 2.0) : 4.0)); c.v[0][0] = new double[1][1]; c.v[0][0][0][0] = 5.0; double val5 = get(); - assertEquals(val5, (isStableEnabled ? (isServerWithStable ? 1.0 : 2.0) + assertEquals(val5, (isStableEnabled ? (isStableEnabled ? 1.0 : 2.0) : 5.0)); c.v[0][0][0] = new double[1]; c.v[0][0][0][0] = 6.0; double val6 = get(); - assertEquals(val6, (isStableEnabled ? (isServerWithStable ? 1.0 : 2.0) + assertEquals(val6, (isStableEnabled ? (isStableEnabled ? 1.0 : 2.0) : 6.0)); } { c.v = new double[1][1][1][1]; double[] val1 = get1(); c.v[0][0][0] = new double[1]; double[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { c.v = new double[1][1][1][1]; double[][] val1 = get2(); c.v[0][0] = new double[1][1]; double[][] val2 = get2(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { c.v = new double[1][1][1][1]; double[][][] val1 = get3(); c.v[0] = new double[1][1][1]; double[][][] val2 = get3(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -434,7 +433,7 @@ c.v = new double[1][1]; c.v[0] = new double[0]; double[] val1 = get1(); c.v[0] = new double[0]; double[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -470,14 +469,14 @@ c.v = new double[1][1][1]; c.v[0][0] = new double[0]; double[] val1 = get1(); c.v[0][0] = new double[0]; double[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { c.v = new double[1][1][1]; c.v[0] = new double[0][0]; double[][] val1 = get2(); c.v[0] = new double[0][0]; double[][] val2 = get2(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -612,7 +611,7 @@ elem.a = 2.0; double val3 = get(); double val4 = get1(); assertEquals(val1, 1.0); - assertEquals(val3, (isServerWithStable ? 1.0 : 2.0)); + assertEquals(val3, (isStableEnabled ? 1.0 : 2.0)); assertEquals(val2, 1.0); assertEquals(val4, 2.0); --- old/test/compiler/stable/TestStableFloat.java 2016-02-29 15:42:36.000000000 +0300 +++ new/test/compiler/stable/TestStableFloat.java 2016-02-29 15:42:36.000000000 +0300 @@ -88,7 +88,6 @@ public class TestStableFloat { static final boolean isStableEnabled = StableConfiguration.isStableEnabled; - static final boolean isServerWithStable = StableConfiguration.isServerWithStable; public static void main(String[] args) throws Exception { run(DefaultValue.class); @@ -209,10 +208,10 @@ c.v = new float[1]; c.v[0] = 1.0F; float val1 = get(); c.v[0] = 2.0F; float val2 = get(); assertEquals(val1, 1.0F); - assertEquals(val2, (isServerWithStable ? 1.0F : 2.0F)); + assertEquals(val2, (isStableEnabled ? 1.0F : 2.0F)); c.v = new float[1]; c.v[0] = 3.0F; float val3 = get(); - assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1.0F : 2.0F) + assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 1.0F : 2.0F) : 3.0F)); } @@ -220,10 +219,10 @@ c.v = new float[20]; c.v[10] = 1.0F; float val1 = get1(); c.v[10] = 2.0F; float val2 = get1(); assertEquals(val1, 1.0F); - assertEquals(val2, (isServerWithStable ? 1.0F : 2.0F)); + assertEquals(val2, (isStableEnabled ? 1.0F : 2.0F)); c.v = new float[20]; c.v[10] = 3.0F; float val3 = get1(); - assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1.0F : 2.0F) + assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 1.0F : 2.0F) : 3.0F)); } @@ -249,21 +248,21 @@ c.v = new float[1][1]; c.v[0][0] = 1.0F; float val1 = get(); c.v[0][0] = 2.0F; float val2 = get(); assertEquals(val1, 1.0F); - assertEquals(val2, (isServerWithStable ? 1.0F : 2.0F)); + assertEquals(val2, (isStableEnabled ? 1.0F : 2.0F)); c.v = new float[1][1]; c.v[0][0] = 3.0F; float val3 = get(); - assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1.0F : 2.0F) + assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 1.0F : 2.0F) : 3.0F)); c.v[0] = new float[1]; c.v[0][0] = 4.0F; float val4 = get(); - assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 1.0F : 2.0F) + assertEquals(val4, (isStableEnabled ? (isStableEnabled ? 1.0F : 2.0F) : 4.0F)); } { c.v = new float[1][1]; float[] val1 = get1(); c.v[0] = new float[1]; float[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -289,31 +288,31 @@ c.v = new float[1][1][1]; c.v[0][0][0] = 1.0F; float val1 = get(); c.v[0][0][0] = 2.0F; float val2 = get(); assertEquals(val1, 1.0F); - assertEquals(val2, (isServerWithStable ? 1.0F : 2.0F)); + assertEquals(val2, (isStableEnabled ? 1.0F : 2.0F)); c.v = new float[1][1][1]; c.v[0][0][0] = 3.0F; float val3 = get(); - assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1.0F : 2.0F) + assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 1.0F : 2.0F) : 3.0F)); c.v[0] = new float[1][1]; c.v[0][0][0] = 4.0F; float val4 = get(); - assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 1.0F : 2.0F) + assertEquals(val4, (isStableEnabled ? (isStableEnabled ? 1.0F : 2.0F) : 4.0F)); c.v[0][0] = new float[1]; c.v[0][0][0] = 5.0F; float val5 = get(); - assertEquals(val5, (isStableEnabled ? (isServerWithStable ? 1.0F : 2.0F) + assertEquals(val5, (isStableEnabled ? (isStableEnabled ? 1.0F : 2.0F) : 5.0F)); } { c.v = new float[1][1][1]; float[] val1 = get1(); c.v[0][0] = new float[1]; float[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { c.v = new float[1][1][1]; float[][] val1 = get2(); c.v[0] = new float[1][1]; float[][] val2 = get2(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -340,41 +339,41 @@ c.v = new float[1][1][1][1]; c.v[0][0][0][0] = 1.0F; float val1 = get(); c.v[0][0][0][0] = 2.0F; float val2 = get(); assertEquals(val1, 1.0F); - assertEquals(val2, (isServerWithStable ? 1.0F : 2.0F)); + assertEquals(val2, (isStableEnabled ? 1.0F : 2.0F)); c.v = new float[1][1][1][1]; c.v[0][0][0][0] = 3.0F; float val3 = get(); - assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1.0F : 2.0F) + assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 1.0F : 2.0F) : 3.0F)); c.v[0] = new float[1][1][1]; c.v[0][0][0][0] = 4.0F; float val4 = get(); - assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 1.0F : 2.0F) + assertEquals(val4, (isStableEnabled ? (isStableEnabled ? 1.0F : 2.0F) : 4.0F)); c.v[0][0] = new float[1][1]; c.v[0][0][0][0] = 5.0F; float val5 = get(); - assertEquals(val5, (isStableEnabled ? (isServerWithStable ? 1.0F : 2.0F) + assertEquals(val5, (isStableEnabled ? (isStableEnabled ? 1.0F : 2.0F) : 5.0F)); c.v[0][0][0] = new float[1]; c.v[0][0][0][0] = 6.0F; float val6 = get(); - assertEquals(val6, (isStableEnabled ? (isServerWithStable ? 1.0F : 2.0F) + assertEquals(val6, (isStableEnabled ? (isStableEnabled ? 1.0F : 2.0F) : 6.0F)); } { c.v = new float[1][1][1][1]; float[] val1 = get1(); c.v[0][0][0] = new float[1]; float[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { c.v = new float[1][1][1][1]; float[][] val1 = get2(); c.v[0][0] = new float[1][1]; float[][] val2 = get2(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { c.v = new float[1][1][1][1]; float[][][] val1 = get3(); c.v[0] = new float[1][1][1]; float[][][] val2 = get3(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -434,7 +433,7 @@ c.v = new float[1][1]; c.v[0] = new float[0]; float[] val1 = get1(); c.v[0] = new float[0]; float[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -470,14 +469,14 @@ c.v = new float[1][1][1]; c.v[0][0] = new float[0]; float[] val1 = get1(); c.v[0][0] = new float[0]; float[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { c.v = new float[1][1][1]; c.v[0] = new float[0][0]; float[][] val1 = get2(); c.v[0] = new float[0][0]; float[][] val2 = get2(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -612,7 +611,7 @@ elem.a = 2.0F; float val3 = get(); float val4 = get1(); assertEquals(val1, 1.0F); - assertEquals(val3, (isServerWithStable ? 1.0F : 2.0F)); + assertEquals(val3, (isStableEnabled ? 1.0F : 2.0F)); assertEquals(val2, 1.0F); assertEquals(val4, 2.0F); --- old/test/compiler/stable/TestStableInt.java 2016-02-29 15:42:36.000000000 +0300 +++ new/test/compiler/stable/TestStableInt.java 2016-02-29 15:42:36.000000000 +0300 @@ -88,7 +88,6 @@ public class TestStableInt { static final boolean isStableEnabled = StableConfiguration.isStableEnabled; - static final boolean isServerWithStable = StableConfiguration.isServerWithStable; public static void main(String[] args) throws Exception { run(DefaultValue.class); @@ -209,10 +208,10 @@ c.v = new int[1]; c.v[0] = 1; int val1 = get(); c.v[0] = 2; int val2 = get(); assertEquals(val1, 1); - assertEquals(val2, (isServerWithStable ? 1 : 2)); + assertEquals(val2, (isStableEnabled ? 1 : 2)); c.v = new int[1]; c.v[0] = 3; int val3 = get(); - assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 3)); } @@ -220,10 +219,10 @@ c.v = new int[20]; c.v[10] = 1; int val1 = get1(); c.v[10] = 2; int val2 = get1(); assertEquals(val1, 1); - assertEquals(val2, (isServerWithStable ? 1 : 2)); + assertEquals(val2, (isStableEnabled ? 1 : 2)); c.v = new int[20]; c.v[10] = 3; int val3 = get1(); - assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 3)); } @@ -249,21 +248,21 @@ c.v = new int[1][1]; c.v[0][0] = 1; int val1 = get(); c.v[0][0] = 2; int val2 = get(); assertEquals(val1, 1); - assertEquals(val2, (isServerWithStable ? 1 : 2)); + assertEquals(val2, (isStableEnabled ? 1 : 2)); c.v = new int[1][1]; c.v[0][0] = 3; int val3 = get(); - assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 3)); c.v[0] = new int[1]; c.v[0][0] = 4; int val4 = get(); - assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val4, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 4)); } { c.v = new int[1][1]; int[] val1 = get1(); c.v[0] = new int[1]; int[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -289,31 +288,31 @@ c.v = new int[1][1][1]; c.v[0][0][0] = 1; int val1 = get(); c.v[0][0][0] = 2; int val2 = get(); assertEquals(val1, 1); - assertEquals(val2, (isServerWithStable ? 1 : 2)); + assertEquals(val2, (isStableEnabled ? 1 : 2)); c.v = new int[1][1][1]; c.v[0][0][0] = 3; int val3 = get(); - assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 3)); c.v[0] = new int[1][1]; c.v[0][0][0] = 4; int val4 = get(); - assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val4, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 4)); c.v[0][0] = new int[1]; c.v[0][0][0] = 5; int val5 = get(); - assertEquals(val5, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val5, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 5)); } { c.v = new int[1][1][1]; int[] val1 = get1(); c.v[0][0] = new int[1]; int[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { c.v = new int[1][1][1]; int[][] val1 = get2(); c.v[0] = new int[1][1]; int[][] val2 = get2(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -340,41 +339,41 @@ c.v = new int[1][1][1][1]; c.v[0][0][0][0] = 1; int val1 = get(); c.v[0][0][0][0] = 2; int val2 = get(); assertEquals(val1, 1); - assertEquals(val2, (isServerWithStable ? 1 : 2)); + assertEquals(val2, (isStableEnabled ? 1 : 2)); c.v = new int[1][1][1][1]; c.v[0][0][0][0] = 3; int val3 = get(); - assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 3)); c.v[0] = new int[1][1][1]; c.v[0][0][0][0] = 4; int val4 = get(); - assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val4, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 4)); c.v[0][0] = new int[1][1]; c.v[0][0][0][0] = 5; int val5 = get(); - assertEquals(val5, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val5, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 5)); c.v[0][0][0] = new int[1]; c.v[0][0][0][0] = 6; int val6 = get(); - assertEquals(val6, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val6, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 6)); } { c.v = new int[1][1][1][1]; int[] val1 = get1(); c.v[0][0][0] = new int[1]; int[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { c.v = new int[1][1][1][1]; int[][] val1 = get2(); c.v[0][0] = new int[1][1]; int[][] val2 = get2(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { c.v = new int[1][1][1][1]; int[][][] val1 = get3(); c.v[0] = new int[1][1][1]; int[][][] val2 = get3(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -434,7 +433,7 @@ c.v = new int[1][1]; c.v[0] = new int[0]; int[] val1 = get1(); c.v[0] = new int[0]; int[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -470,14 +469,14 @@ c.v = new int[1][1][1]; c.v[0][0] = new int[0]; int[] val1 = get1(); c.v[0][0] = new int[0]; int[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { c.v = new int[1][1][1]; c.v[0] = new int[0][0]; int[][] val1 = get2(); c.v[0] = new int[0][0]; int[][] val2 = get2(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -612,7 +611,7 @@ elem.a = 2; int val3 = get(); int val4 = get1(); assertEquals(val1, 1); - assertEquals(val3, (isServerWithStable ? 1 : 2)); + assertEquals(val3, (isStableEnabled ? 1 : 2)); assertEquals(val2, 1); assertEquals(val4, 2); --- old/test/compiler/stable/TestStableLong.java 2016-02-29 15:42:37.000000000 +0300 +++ new/test/compiler/stable/TestStableLong.java 2016-02-29 15:42:36.000000000 +0300 @@ -88,7 +88,6 @@ public class TestStableLong { static final boolean isStableEnabled = StableConfiguration.isStableEnabled; - static final boolean isServerWithStable = StableConfiguration.isServerWithStable; public static void main(String[] args) throws Exception { run(DefaultValue.class); @@ -209,10 +208,10 @@ c.v = new long[1]; c.v[0] = 1; long val1 = get(); c.v[0] = 2; long val2 = get(); assertEquals(val1, 1); - assertEquals(val2, (isServerWithStable ? 1 : 2)); + assertEquals(val2, (isStableEnabled ? 1 : 2)); c.v = new long[1]; c.v[0] = 3; long val3 = get(); - assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 3)); } @@ -220,10 +219,10 @@ c.v = new long[20]; c.v[10] = 1; long val1 = get1(); c.v[10] = 2; long val2 = get1(); assertEquals(val1, 1); - assertEquals(val2, (isServerWithStable ? 1 : 2)); + assertEquals(val2, (isStableEnabled ? 1 : 2)); c.v = new long[20]; c.v[10] = 3; long val3 = get1(); - assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 3)); } @@ -249,21 +248,21 @@ c.v = new long[1][1]; c.v[0][0] = 1; long val1 = get(); c.v[0][0] = 2; long val2 = get(); assertEquals(val1, 1); - assertEquals(val2, (isServerWithStable ? 1 : 2)); + assertEquals(val2, (isStableEnabled ? 1 : 2)); c.v = new long[1][1]; c.v[0][0] = 3; long val3 = get(); - assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 3)); c.v[0] = new long[1]; c.v[0][0] = 4; long val4 = get(); - assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val4, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 4)); } { c.v = new long[1][1]; long[] val1 = get1(); c.v[0] = new long[1]; long[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -289,31 +288,31 @@ c.v = new long[1][1][1]; c.v[0][0][0] = 1; long val1 = get(); c.v[0][0][0] = 2; long val2 = get(); assertEquals(val1, 1); - assertEquals(val2, (isServerWithStable ? 1 : 2)); + assertEquals(val2, (isStableEnabled ? 1 : 2)); c.v = new long[1][1][1]; c.v[0][0][0] = 3; long val3 = get(); - assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 3)); c.v[0] = new long[1][1]; c.v[0][0][0] = 4; long val4 = get(); - assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val4, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 4)); c.v[0][0] = new long[1]; c.v[0][0][0] = 5; long val5 = get(); - assertEquals(val5, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val5, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 5)); } { c.v = new long[1][1][1]; long[] val1 = get1(); c.v[0][0] = new long[1]; long[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { c.v = new long[1][1][1]; long[][] val1 = get2(); c.v[0] = new long[1][1]; long[][] val2 = get2(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -340,41 +339,41 @@ c.v = new long[1][1][1][1]; c.v[0][0][0][0] = 1; long val1 = get(); c.v[0][0][0][0] = 2; long val2 = get(); assertEquals(val1, 1); - assertEquals(val2, (isServerWithStable ? 1 : 2)); + assertEquals(val2, (isStableEnabled ? 1 : 2)); c.v = new long[1][1][1][1]; c.v[0][0][0][0] = 3; long val3 = get(); - assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 3)); c.v[0] = new long[1][1][1]; c.v[0][0][0][0] = 4; long val4 = get(); - assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val4, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 4)); c.v[0][0] = new long[1][1]; c.v[0][0][0][0] = 5; long val5 = get(); - assertEquals(val5, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val5, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 5)); c.v[0][0][0] = new long[1]; c.v[0][0][0][0] = 6; long val6 = get(); - assertEquals(val6, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val6, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 6)); } { c.v = new long[1][1][1][1]; long[] val1 = get1(); c.v[0][0][0] = new long[1]; long[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { c.v = new long[1][1][1][1]; long[][] val1 = get2(); c.v[0][0] = new long[1][1]; long[][] val2 = get2(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { c.v = new long[1][1][1][1]; long[][][] val1 = get3(); c.v[0] = new long[1][1][1]; long[][][] val2 = get3(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -434,7 +433,7 @@ c.v = new long[1][1]; c.v[0] = new long[0]; long[] val1 = get1(); c.v[0] = new long[0]; long[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -470,14 +469,14 @@ c.v = new long[1][1][1]; c.v[0][0] = new long[0]; long[] val1 = get1(); c.v[0][0] = new long[0]; long[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { c.v = new long[1][1][1]; c.v[0] = new long[0][0]; long[][] val1 = get2(); c.v[0] = new long[0][0]; long[][] val2 = get2(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -612,7 +611,7 @@ elem.a = 2; long val3 = get(); long val4 = get1(); assertEquals(val1, 1); - assertEquals(val3, (isServerWithStable ? 1 : 2)); + assertEquals(val3, (isStableEnabled ? 1 : 2)); assertEquals(val2, 1); assertEquals(val4, 2); --- old/test/compiler/stable/TestStableObject.java 2016-02-29 15:42:37.000000000 +0300 +++ new/test/compiler/stable/TestStableObject.java 2016-02-29 15:42:37.000000000 +0300 @@ -89,7 +89,6 @@ public class TestStableObject { static final boolean isStableEnabled = StableConfiguration.isStableEnabled; - static final boolean isServerWithStable = StableConfiguration.isServerWithStable; public static void main(String[] args) throws Exception { run(DefaultValue.class); @@ -212,10 +211,10 @@ c.v = new Object[1]; c.v[0] = Values.A; Object val1 = get(); c.v[0] = Values.B; Object val2 = get(); assertEquals(val1, Values.A); - assertEquals(val2, (isServerWithStable ? Values.A : Values.B)); + assertEquals(val2, (isStableEnabled ? Values.A : Values.B)); c.v = new Object[1]; c.v[0] = Values.C; Object val3 = get(); - assertEquals(val3, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B) + assertEquals(val3, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B) : Values.C)); } @@ -223,10 +222,10 @@ c.v = new Object[20]; c.v[10] = Values.A; Object val1 = get1(); c.v[10] = Values.B; Object val2 = get1(); assertEquals(val1, Values.A); - assertEquals(val2, (isServerWithStable ? Values.A : Values.B)); + assertEquals(val2, (isStableEnabled ? Values.A : Values.B)); c.v = new Object[20]; c.v[10] = Values.C; Object val3 = get1(); - assertEquals(val3, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B) + assertEquals(val3, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B) : Values.C)); } @@ -252,21 +251,21 @@ c.v = new Object[1][1]; c.v[0][0] = Values.A; Object val1 = get(); c.v[0][0] = Values.B; Object val2 = get(); assertEquals(val1, Values.A); - assertEquals(val2, (isServerWithStable ? Values.A : Values.B)); + assertEquals(val2, (isStableEnabled ? Values.A : Values.B)); c.v = new Object[1][1]; c.v[0][0] = Values.C; Object val3 = get(); - assertEquals(val3, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B) + assertEquals(val3, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B) : Values.C)); c.v[0] = new Object[1]; c.v[0][0] = Values.D; Object val4 = get(); - assertEquals(val4, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B) + assertEquals(val4, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B) : Values.D)); } { c.v = new Object[1][1]; Object[] val1 = get1(); c.v[0] = new Object[1]; Object[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -292,31 +291,31 @@ c.v = new Object[1][1][1]; c.v[0][0][0] = Values.A; Object val1 = get(); c.v[0][0][0] = Values.B; Object val2 = get(); assertEquals(val1, Values.A); - assertEquals(val2, (isServerWithStable ? Values.A : Values.B)); + assertEquals(val2, (isStableEnabled ? Values.A : Values.B)); c.v = new Object[1][1][1]; c.v[0][0][0] = Values.C; Object val3 = get(); - assertEquals(val3, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B) + assertEquals(val3, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B) : Values.C)); c.v[0] = new Object[1][1]; c.v[0][0][0] = Values.D; Object val4 = get(); - assertEquals(val4, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B) + assertEquals(val4, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B) : Values.D)); c.v[0][0] = new Object[1]; c.v[0][0][0] = Values.E; Object val5 = get(); - assertEquals(val5, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B) + assertEquals(val5, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B) : Values.E)); } { c.v = new Object[1][1][1]; Object[] val1 = get1(); c.v[0][0] = new Object[1]; Object[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { c.v = new Object[1][1][1]; Object[][] val1 = get2(); c.v[0] = new Object[1][1]; Object[][] val2 = get2(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -343,41 +342,41 @@ c.v = new Object[1][1][1][1]; c.v[0][0][0][0] = Values.A; Object val1 = get(); c.v[0][0][0][0] = Values.B; Object val2 = get(); assertEquals(val1, Values.A); - assertEquals(val2, (isServerWithStable ? Values.A : Values.B)); + assertEquals(val2, (isStableEnabled ? Values.A : Values.B)); c.v = new Object[1][1][1][1]; c.v[0][0][0][0] = Values.C; Object val3 = get(); - assertEquals(val3, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B) + assertEquals(val3, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B) : Values.C)); c.v[0] = new Object[1][1][1]; c.v[0][0][0][0] = Values.D; Object val4 = get(); - assertEquals(val4, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B) + assertEquals(val4, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B) : Values.D)); c.v[0][0] = new Object[1][1]; c.v[0][0][0][0] = Values.E; Object val5 = get(); - assertEquals(val5, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B) + assertEquals(val5, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B) : Values.E)); c.v[0][0][0] = new Object[1]; c.v[0][0][0][0] = Values.F; Object val6 = get(); - assertEquals(val6, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B) + assertEquals(val6, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B) : Values.F)); } { c.v = new Object[1][1][1][1]; Object[] val1 = get1(); c.v[0][0][0] = new Object[1]; Object[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { c.v = new Object[1][1][1][1]; Object[][] val1 = get2(); c.v[0][0] = new Object[1][1]; Object[][] val2 = get2(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { c.v = new Object[1][1][1][1]; Object[][][] val1 = get3(); c.v[0] = new Object[1][1][1]; Object[][][] val2 = get3(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -437,7 +436,7 @@ c.v = new Object[1][1]; c.v[0] = new Object[0]; Object[] val1 = get1(); c.v[0] = new Object[0]; Object[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -473,14 +472,14 @@ c.v = new Object[1][1][1]; c.v[0][0] = new Object[0]; Object[] val1 = get1(); c.v[0][0] = new Object[0]; Object[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { c.v = new Object[1][1][1]; c.v[0] = new Object[0][0]; Object[][] val1 = get2(); c.v[0] = new Object[0][0]; Object[][] val2 = get2(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -615,7 +614,7 @@ elem.a = Values.B; Object val3 = get(); Object val4 = get1(); assertEquals(val1, Values.A); - assertEquals(val3, (isServerWithStable ? Values.A : Values.B)); + assertEquals(val3, (isStableEnabled ? Values.A : Values.B)); assertEquals(val2, Values.A); assertEquals(val4, Values.B); --- old/test/compiler/stable/TestStableShort.java 2016-02-29 15:42:37.000000000 +0300 +++ new/test/compiler/stable/TestStableShort.java 2016-02-29 15:42:37.000000000 +0300 @@ -88,7 +88,6 @@ public class TestStableShort { static final boolean isStableEnabled = StableConfiguration.isStableEnabled; - static final boolean isServerWithStable = StableConfiguration.isServerWithStable; public static void main(String[] args) throws Exception { run(DefaultValue.class); @@ -209,10 +208,10 @@ c.v = new short[1]; c.v[0] = 1; short val1 = get(); c.v[0] = 2; short val2 = get(); assertEquals(val1, 1); - assertEquals(val2, (isServerWithStable ? 1 : 2)); + assertEquals(val2, (isStableEnabled ? 1 : 2)); c.v = new short[1]; c.v[0] = 3; short val3 = get(); - assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 3)); } @@ -220,10 +219,10 @@ c.v = new short[20]; c.v[10] = 1; short val1 = get1(); c.v[10] = 2; short val2 = get1(); assertEquals(val1, 1); - assertEquals(val2, (isServerWithStable ? 1 : 2)); + assertEquals(val2, (isStableEnabled ? 1 : 2)); c.v = new short[20]; c.v[10] = 3; short val3 = get1(); - assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 3)); } @@ -249,21 +248,21 @@ c.v = new short[1][1]; c.v[0][0] = 1; short val1 = get(); c.v[0][0] = 2; short val2 = get(); assertEquals(val1, 1); - assertEquals(val2, (isServerWithStable ? 1 : 2)); + assertEquals(val2, (isStableEnabled ? 1 : 2)); c.v = new short[1][1]; c.v[0][0] = 3; short val3 = get(); - assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 3)); c.v[0] = new short[1]; c.v[0][0] = 4; short val4 = get(); - assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val4, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 4)); } { c.v = new short[1][1]; short[] val1 = get1(); c.v[0] = new short[1]; short[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -289,31 +288,31 @@ c.v = new short[1][1][1]; c.v[0][0][0] = 1; short val1 = get(); c.v[0][0][0] = 2; short val2 = get(); assertEquals(val1, 1); - assertEquals(val2, (isServerWithStable ? 1 : 2)); + assertEquals(val2, (isStableEnabled ? 1 : 2)); c.v = new short[1][1][1]; c.v[0][0][0] = 3; short val3 = get(); - assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 3)); c.v[0] = new short[1][1]; c.v[0][0][0] = 4; short val4 = get(); - assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val4, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 4)); c.v[0][0] = new short[1]; c.v[0][0][0] = 5; short val5 = get(); - assertEquals(val5, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val5, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 5)); } { c.v = new short[1][1][1]; short[] val1 = get1(); c.v[0][0] = new short[1]; short[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { c.v = new short[1][1][1]; short[][] val1 = get2(); c.v[0] = new short[1][1]; short[][] val2 = get2(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -340,41 +339,41 @@ c.v = new short[1][1][1][1]; c.v[0][0][0][0] = 1; short val1 = get(); c.v[0][0][0][0] = 2; short val2 = get(); assertEquals(val1, 1); - assertEquals(val2, (isServerWithStable ? 1 : 2)); + assertEquals(val2, (isStableEnabled ? 1 : 2)); c.v = new short[1][1][1][1]; c.v[0][0][0][0] = 3; short val3 = get(); - assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 3)); c.v[0] = new short[1][1][1]; c.v[0][0][0][0] = 4; short val4 = get(); - assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val4, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 4)); c.v[0][0] = new short[1][1]; c.v[0][0][0][0] = 5; short val5 = get(); - assertEquals(val5, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val5, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 5)); c.v[0][0][0] = new short[1]; c.v[0][0][0][0] = 6; short val6 = get(); - assertEquals(val6, (isStableEnabled ? (isServerWithStable ? 1 : 2) + assertEquals(val6, (isStableEnabled ? (isStableEnabled ? 1 : 2) : 6)); } { c.v = new short[1][1][1][1]; short[] val1 = get1(); c.v[0][0][0] = new short[1]; short[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { c.v = new short[1][1][1][1]; short[][] val1 = get2(); c.v[0][0] = new short[1][1]; short[][] val2 = get2(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { c.v = new short[1][1][1][1]; short[][][] val1 = get3(); c.v[0] = new short[1][1][1]; short[][][] val2 = get3(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -434,7 +433,7 @@ c.v = new short[1][1]; c.v[0] = new short[0]; short[] val1 = get1(); c.v[0] = new short[0]; short[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -470,14 +469,14 @@ c.v = new short[1][1][1]; c.v[0][0] = new short[0]; short[] val1 = get1(); c.v[0][0] = new short[0]; short[] val2 = get1(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { c.v = new short[1][1][1]; c.v[0] = new short[0][0]; short[][] val1 = get2(); c.v[0] = new short[0][0]; short[][] val2 = get2(); - assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); + assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); } { @@ -612,7 +611,7 @@ elem.a = 2; short val3 = get(); short val4 = get1(); assertEquals(val1, 1); - assertEquals(val3, (isServerWithStable ? 1 : 2)); + assertEquals(val3, (isStableEnabled ? 1 : 2)); assertEquals(val2, 1); assertEquals(val4, 2); --- old/test/compiler/unsafe/UnsafeGetConstantField.java 2016-02-29 15:42:38.000000000 +0300 +++ new/test/compiler/unsafe/UnsafeGetConstantField.java 2016-02-29 15:42:38.000000000 +0300 @@ -27,6 +27,9 @@ * @test * @summary tests on constant folding of unsafe get operations * @library /testlibrary /test/lib + * + * @requires vm.flavor != "client" + * * @run main/bootclasspath -XX:+UnlockDiagnosticVMOptions * -Xbatch -XX:-TieredCompilation * -XX:+FoldStableValues --- old/test/compiler/unsafe/UnsafeGetStableArrayElement.java 2016-02-29 15:42:38.000000000 +0300 +++ new/test/compiler/unsafe/UnsafeGetStableArrayElement.java 2016-02-29 15:42:38.000000000 +0300 @@ -25,17 +25,15 @@ /* * @test - * @summary tests on constant folding of unsafe get operations + * @summary tests on constant folding of unsafe get operations from stable arrays * @library /testlibrary /test/lib * - * @run main/bootclasspath -XX:+UnlockDiagnosticVMOptions - * -Xbatch -XX:-TieredCompilation - * -XX:+FoldStableValues - * UnsafeGetStableArrayElement + * @requires vm.flavor != "client" * * @run main/bootclasspath -XX:+UnlockDiagnosticVMOptions - * -Xbatch -XX:+TieredCompilation -XX:TieredStopAtLevel=1 + * -Xbatch -XX:-TieredCompilation * -XX:+FoldStableValues + * -XX:CompileCommand=dontinline,*Test::test* * UnsafeGetStableArrayElement */ import jdk.internal.misc.Unsafe; @@ -46,23 +44,271 @@ import static jdk.test.lib.Asserts.*; public class UnsafeGetStableArrayElement { - @Stable static final byte[] STABLE_BYTE_ARRAY = new byte[] { 0, 1, -128, 127}; + @Stable static final boolean[] STABLE_BOOLEAN_ARRAY = new boolean[16]; + @Stable static final byte[] STABLE_BYTE_ARRAY = new byte[16]; + @Stable static final short[] STABLE_SHORT_ARRAY = new short[8]; + @Stable static final char[] STABLE_CHAR_ARRAY = new char[8]; + @Stable static final int[] STABLE_INT_ARRAY = new int[4]; + @Stable static final long[] STABLE_LONG_ARRAY = new long[2]; + @Stable static final float[] STABLE_FLOAT_ARRAY = new float[4]; + @Stable static final double[] STABLE_DOUBLE_ARRAY = new double[2]; + @Stable static final Object[] STABLE_OBJECT_ARRAY = new Object[4]; + static { + Setter.reset(); + } static final Unsafe U = Unsafe.getUnsafe(); - static int testChar() { - return U.getChar(STABLE_BYTE_ARRAY, ARRAY_BYTE_BASE_OFFSET + 0 * ARRAY_CHAR_INDEX_SCALE) + - U.getChar(STABLE_BYTE_ARRAY, ARRAY_BYTE_BASE_OFFSET + 1 * ARRAY_CHAR_INDEX_SCALE); + static class Setter { + private static void setZ(boolean defaultVal) { STABLE_BOOLEAN_ARRAY[0] = defaultVal ? false : true; } + private static void setB(boolean defaultVal) { STABLE_BYTE_ARRAY[0] = defaultVal ? 0 : Byte.MAX_VALUE; } + private static void setS(boolean defaultVal) { STABLE_SHORT_ARRAY[0] = defaultVal ? 0 : Short.MAX_VALUE; } + private static void setC(boolean defaultVal) { STABLE_CHAR_ARRAY[0] = defaultVal ? 0 : Character.MAX_VALUE; } + private static void setI(boolean defaultVal) { STABLE_INT_ARRAY[0] = defaultVal ? 0 : Integer.MAX_VALUE; } + private static void setJ(boolean defaultVal) { STABLE_LONG_ARRAY[0] = defaultVal ? 0 : Long.MAX_VALUE; } + private static void setF(boolean defaultVal) { STABLE_FLOAT_ARRAY[0] = defaultVal ? 0 : Float.MAX_VALUE; } + private static void setD(boolean defaultVal) { STABLE_DOUBLE_ARRAY[0] = defaultVal ? 0 : Double.MAX_VALUE; } + private static void setL(boolean defaultVal) { STABLE_OBJECT_ARRAY[0] = defaultVal ? null : new Object(); } + + static void reset() { + setZ(false); + setB(false); + setS(false); + setC(false); + setI(false); + setJ(false); + setF(false); + setD(false); + setL(false); + } + } + + static class Test { + static void changeZ() { Setter.setZ(true); } + static void changeB() { Setter.setB(true); } + static void changeS() { Setter.setS(true); } + static void changeC() { Setter.setC(true); } + static void changeI() { Setter.setI(true); } + static void changeJ() { Setter.setJ(true); } + static void changeF() { Setter.setF(true); } + static void changeD() { Setter.setD(true); } + static void changeL() { Setter.setL(true); } + + static boolean testZ_Z() { return U.getBoolean(STABLE_BOOLEAN_ARRAY, ARRAY_BOOLEAN_BASE_OFFSET); } + static byte testZ_B() { return U.getByte( STABLE_BOOLEAN_ARRAY, ARRAY_BOOLEAN_BASE_OFFSET); } + static short testZ_S() { return U.getShort( STABLE_BOOLEAN_ARRAY, ARRAY_BOOLEAN_BASE_OFFSET); } + static char testZ_C() { return U.getChar( STABLE_BOOLEAN_ARRAY, ARRAY_BOOLEAN_BASE_OFFSET); } + static int testZ_I() { return U.getInt( STABLE_BOOLEAN_ARRAY, ARRAY_BOOLEAN_BASE_OFFSET); } + static long testZ_J() { return U.getLong( STABLE_BOOLEAN_ARRAY, ARRAY_BOOLEAN_BASE_OFFSET); } + static float testZ_F() { return U.getFloat( STABLE_BOOLEAN_ARRAY, ARRAY_BOOLEAN_BASE_OFFSET); } + static double testZ_D() { return U.getDouble( STABLE_BOOLEAN_ARRAY, ARRAY_BOOLEAN_BASE_OFFSET); } + + static boolean testB_Z() { return U.getBoolean(STABLE_BYTE_ARRAY, ARRAY_BYTE_BASE_OFFSET); } + static byte testB_B() { return U.getByte( STABLE_BYTE_ARRAY, ARRAY_BYTE_BASE_OFFSET); } + static short testB_S() { return U.getShort( STABLE_BYTE_ARRAY, ARRAY_BYTE_BASE_OFFSET); } + static char testB_C() { return U.getChar( STABLE_BYTE_ARRAY, ARRAY_BYTE_BASE_OFFSET); } + static int testB_I() { return U.getInt( STABLE_BYTE_ARRAY, ARRAY_BYTE_BASE_OFFSET); } + static long testB_J() { return U.getLong( STABLE_BYTE_ARRAY, ARRAY_BYTE_BASE_OFFSET); } + static float testB_F() { return U.getFloat( STABLE_BYTE_ARRAY, ARRAY_BYTE_BASE_OFFSET); } + static double testB_D() { return U.getDouble( STABLE_BYTE_ARRAY, ARRAY_BYTE_BASE_OFFSET); } + + static boolean testS_Z() { return U.getBoolean(STABLE_SHORT_ARRAY, ARRAY_SHORT_BASE_OFFSET); } + static byte testS_B() { return U.getByte( STABLE_SHORT_ARRAY, ARRAY_SHORT_BASE_OFFSET); } + static short testS_S() { return U.getShort( STABLE_SHORT_ARRAY, ARRAY_SHORT_BASE_OFFSET); } + static char testS_C() { return U.getChar( STABLE_SHORT_ARRAY, ARRAY_SHORT_BASE_OFFSET); } + static int testS_I() { return U.getInt( STABLE_SHORT_ARRAY, ARRAY_SHORT_BASE_OFFSET); } + static long testS_J() { return U.getLong( STABLE_SHORT_ARRAY, ARRAY_SHORT_BASE_OFFSET); } + static float testS_F() { return U.getFloat( STABLE_SHORT_ARRAY, ARRAY_SHORT_BASE_OFFSET); } + static double testS_D() { return U.getDouble( STABLE_SHORT_ARRAY, ARRAY_SHORT_BASE_OFFSET); } + + static boolean testC_Z() { return U.getBoolean(STABLE_CHAR_ARRAY, ARRAY_CHAR_BASE_OFFSET); } + static byte testC_B() { return U.getByte( STABLE_CHAR_ARRAY, ARRAY_CHAR_BASE_OFFSET); } + static short testC_S() { return U.getShort( STABLE_CHAR_ARRAY, ARRAY_CHAR_BASE_OFFSET); } + static char testC_C() { return U.getChar( STABLE_CHAR_ARRAY, ARRAY_CHAR_BASE_OFFSET); } + static int testC_I() { return U.getInt( STABLE_CHAR_ARRAY, ARRAY_CHAR_BASE_OFFSET); } + static long testC_J() { return U.getLong( STABLE_CHAR_ARRAY, ARRAY_CHAR_BASE_OFFSET); } + static float testC_F() { return U.getFloat( STABLE_CHAR_ARRAY, ARRAY_CHAR_BASE_OFFSET); } + static double testC_D() { return U.getDouble( STABLE_CHAR_ARRAY, ARRAY_CHAR_BASE_OFFSET); } + + static boolean testI_Z() { return U.getBoolean(STABLE_INT_ARRAY, ARRAY_INT_BASE_OFFSET); } + static byte testI_B() { return U.getByte( STABLE_INT_ARRAY, ARRAY_INT_BASE_OFFSET); } + static short testI_S() { return U.getShort( STABLE_INT_ARRAY, ARRAY_INT_BASE_OFFSET); } + static char testI_C() { return U.getChar( STABLE_INT_ARRAY, ARRAY_INT_BASE_OFFSET); } + static int testI_I() { return U.getInt( STABLE_INT_ARRAY, ARRAY_INT_BASE_OFFSET); } + static long testI_J() { return U.getLong( STABLE_INT_ARRAY, ARRAY_INT_BASE_OFFSET); } + static float testI_F() { return U.getFloat( STABLE_INT_ARRAY, ARRAY_INT_BASE_OFFSET); } + static double testI_D() { return U.getDouble( STABLE_INT_ARRAY, ARRAY_INT_BASE_OFFSET); } + + static boolean testJ_Z() { return U.getBoolean(STABLE_LONG_ARRAY, ARRAY_LONG_BASE_OFFSET); } + static byte testJ_B() { return U.getByte( STABLE_LONG_ARRAY, ARRAY_LONG_BASE_OFFSET); } + static short testJ_S() { return U.getShort( STABLE_LONG_ARRAY, ARRAY_LONG_BASE_OFFSET); } + static char testJ_C() { return U.getChar( STABLE_LONG_ARRAY, ARRAY_LONG_BASE_OFFSET); } + static int testJ_I() { return U.getInt( STABLE_LONG_ARRAY, ARRAY_LONG_BASE_OFFSET); } + static long testJ_J() { return U.getLong( STABLE_LONG_ARRAY, ARRAY_LONG_BASE_OFFSET); } + static float testJ_F() { return U.getFloat( STABLE_LONG_ARRAY, ARRAY_LONG_BASE_OFFSET); } + static double testJ_D() { return U.getDouble( STABLE_LONG_ARRAY, ARRAY_LONG_BASE_OFFSET); } + + static boolean testF_Z() { return U.getBoolean(STABLE_FLOAT_ARRAY, ARRAY_FLOAT_BASE_OFFSET); } + static byte testF_B() { return U.getByte( STABLE_FLOAT_ARRAY, ARRAY_FLOAT_BASE_OFFSET); } + static short testF_S() { return U.getShort( STABLE_FLOAT_ARRAY, ARRAY_FLOAT_BASE_OFFSET); } + static char testF_C() { return U.getChar( STABLE_FLOAT_ARRAY, ARRAY_FLOAT_BASE_OFFSET); } + static int testF_I() { return U.getInt( STABLE_FLOAT_ARRAY, ARRAY_FLOAT_BASE_OFFSET); } + static long testF_J() { return U.getLong( STABLE_FLOAT_ARRAY, ARRAY_FLOAT_BASE_OFFSET); } + static float testF_F() { return U.getFloat( STABLE_FLOAT_ARRAY, ARRAY_FLOAT_BASE_OFFSET); } + static double testF_D() { return U.getDouble( STABLE_FLOAT_ARRAY, ARRAY_FLOAT_BASE_OFFSET); } + + static boolean testD_Z() { return U.getBoolean(STABLE_DOUBLE_ARRAY, ARRAY_DOUBLE_BASE_OFFSET); } + static byte testD_B() { return U.getByte( STABLE_DOUBLE_ARRAY, ARRAY_DOUBLE_BASE_OFFSET); } + static short testD_S() { return U.getShort( STABLE_DOUBLE_ARRAY, ARRAY_DOUBLE_BASE_OFFSET); } + static char testD_C() { return U.getChar( STABLE_DOUBLE_ARRAY, ARRAY_DOUBLE_BASE_OFFSET); } + static int testD_I() { return U.getInt( STABLE_DOUBLE_ARRAY, ARRAY_DOUBLE_BASE_OFFSET); } + static long testD_J() { return U.getLong( STABLE_DOUBLE_ARRAY, ARRAY_DOUBLE_BASE_OFFSET); } + static float testD_F() { return U.getFloat( STABLE_DOUBLE_ARRAY, ARRAY_DOUBLE_BASE_OFFSET); } + static double testD_D() { return U.getDouble( STABLE_DOUBLE_ARRAY, ARRAY_DOUBLE_BASE_OFFSET); } + + static Object testL_L() { return U.getObject( STABLE_OBJECT_ARRAY, ARRAY_OBJECT_BASE_OFFSET); } + static boolean testL_Z() { return U.getBoolean(STABLE_OBJECT_ARRAY, ARRAY_OBJECT_BASE_OFFSET); } + static byte testL_B() { return U.getByte( STABLE_OBJECT_ARRAY, ARRAY_OBJECT_BASE_OFFSET); } + static short testL_S() { return U.getShort( STABLE_OBJECT_ARRAY, ARRAY_OBJECT_BASE_OFFSET); } + static char testL_C() { return U.getChar( STABLE_OBJECT_ARRAY, ARRAY_OBJECT_BASE_OFFSET); } + static int testL_I() { return U.getInt( STABLE_OBJECT_ARRAY, ARRAY_OBJECT_BASE_OFFSET); } + static long testL_J() { return U.getLong( STABLE_OBJECT_ARRAY, ARRAY_OBJECT_BASE_OFFSET); } + static float testL_F() { return U.getFloat( STABLE_OBJECT_ARRAY, ARRAY_OBJECT_BASE_OFFSET); } + static double testL_D() { return U.getDouble( STABLE_OBJECT_ARRAY, ARRAY_OBJECT_BASE_OFFSET); } + + static short testS_U() { return U.getShortUnaligned(STABLE_SHORT_ARRAY, ARRAY_SHORT_BASE_OFFSET + 1); } + static char testC_U() { return U.getCharUnaligned( STABLE_CHAR_ARRAY, ARRAY_CHAR_BASE_OFFSET + 1); } + static int testI_U() { return U.getIntUnaligned( STABLE_INT_ARRAY, ARRAY_INT_BASE_OFFSET + 1); } + static long testJ_U() { return U.getLongUnaligned( STABLE_LONG_ARRAY, ARRAY_LONG_BASE_OFFSET + 1); } } - static void run(Callable c) throws Exception { + static void run(Callable c, Runnable sameResultAction, Runnable changeResultAction) throws Exception { Object first = c.call(); + + // Trigger compilation. for (int i = 0; i < 20_000; i++) { + // Don't compare results here, since most of Test::testL_* results vary across iterations (due to GC). + c.call(); + } + + if (sameResultAction != null) { + sameResultAction.run(); assertEQ(first, c.call()); } + + if (changeResultAction != null) { + changeResultAction.run(); + assertNE(first, c.call()); + assertEQ(c.call(), c.call()); + } + } + + static void testMatched(Callable c, Runnable setDefaultAction) throws Exception { + run(c, setDefaultAction, null); + Setter.reset(); + } + + static void testMismatched(Callable c, Runnable setDefaultAction) throws Exception { + run(c, null, setDefaultAction); + Setter.reset(); } public static void main(String[] args) throws Exception { - run(UnsafeGetStableArrayElement::testChar); + // boolean[], aligned accesses + testMatched( Test::testZ_Z, Test::changeZ); + testMismatched(Test::testZ_B, Test::changeZ); + testMismatched(Test::testZ_S, Test::changeZ); + testMismatched(Test::testZ_C, Test::changeZ); + testMismatched(Test::testZ_I, Test::changeZ); + testMismatched(Test::testZ_J, Test::changeZ); + testMismatched(Test::testZ_F, Test::changeZ); + testMismatched(Test::testZ_D, Test::changeZ); + + // byte[], aligned accesses + testMismatched(Test::testB_Z, Test::changeB); + testMatched( Test::testB_B, Test::changeB); + testMismatched(Test::testB_S, Test::changeB); + testMismatched(Test::testB_C, Test::changeB); + testMismatched(Test::testB_I, Test::changeB); + testMismatched(Test::testB_J, Test::changeB); + testMismatched(Test::testB_F, Test::changeB); + testMismatched(Test::testB_D, Test::changeB); + + // short[], aligned accesses + testMismatched(Test::testS_Z, Test::changeS); + testMismatched(Test::testS_B, Test::changeS); + testMatched( Test::testS_S, Test::changeS); + testMismatched(Test::testS_C, Test::changeS); + testMismatched(Test::testS_I, Test::changeS); + testMismatched(Test::testS_J, Test::changeS); + testMismatched(Test::testS_F, Test::changeS); + testMismatched(Test::testS_D, Test::changeS); + + // char[], aligned accesses + testMismatched(Test::testC_Z, Test::changeC); + testMismatched(Test::testC_B, Test::changeC); + testMismatched(Test::testC_S, Test::changeC); + testMatched( Test::testC_C, Test::changeC); + testMismatched(Test::testC_I, Test::changeC); + testMismatched(Test::testC_J, Test::changeC); + testMismatched(Test::testC_F, Test::changeC); + testMismatched(Test::testC_D, Test::changeC); + + // int[], aligned accesses + testMismatched(Test::testI_Z, Test::changeI); + testMismatched(Test::testI_B, Test::changeI); + testMismatched(Test::testI_S, Test::changeI); + testMismatched(Test::testI_C, Test::changeI); + testMatched( Test::testI_I, Test::changeI); + testMismatched(Test::testI_J, Test::changeI); + testMismatched(Test::testI_F, Test::changeI); + testMismatched(Test::testI_D, Test::changeI); + + // long[], aligned accesses + testMismatched(Test::testJ_Z, Test::changeJ); + testMismatched(Test::testJ_B, Test::changeJ); + testMismatched(Test::testJ_S, Test::changeJ); + testMismatched(Test::testJ_C, Test::changeJ); + testMismatched(Test::testJ_I, Test::changeJ); + testMatched( Test::testJ_J, Test::changeJ); + testMismatched(Test::testJ_F, Test::changeJ); + testMismatched(Test::testJ_D, Test::changeJ); + + // float[], aligned accesses + testMismatched(Test::testF_Z, Test::changeF); + testMismatched(Test::testF_B, Test::changeF); + testMismatched(Test::testF_S, Test::changeF); + testMismatched(Test::testF_C, Test::changeF); + testMismatched(Test::testF_I, Test::changeF); + testMismatched(Test::testF_J, Test::changeF); + testMatched( Test::testF_F, Test::changeF); + testMismatched(Test::testF_D, Test::changeF); + + // double[], aligned accesses + testMismatched(Test::testD_Z, Test::changeD); + testMismatched(Test::testD_B, Test::changeD); + testMismatched(Test::testD_S, Test::changeD); + testMismatched(Test::testD_C, Test::changeD); + testMismatched(Test::testD_I, Test::changeD); + testMismatched(Test::testD_J, Test::changeD); + testMismatched(Test::testD_F, Test::changeD); + testMatched( Test::testD_D, Test::changeD); + + // Object[], aligned accesses + testMismatched(Test::testL_Z, Test::changeL); + testMismatched(Test::testL_B, Test::changeL); + testMismatched(Test::testL_S, Test::changeL); + testMismatched(Test::testL_C, Test::changeL); + testMismatched(Test::testL_I, Test::changeL); + testMismatched(Test::testL_J, Test::changeL); + testMismatched(Test::testL_F, Test::changeL); + testMismatched(Test::testL_D, Test::changeL); + testMatched( Test::testL_L, Test::changeL); + + // Unaligned accesses + testMismatched(Test::testS_U, Test::changeS); + testMismatched(Test::testC_U, Test::changeC); + testMismatched(Test::testI_U, Test::changeI); + testMismatched(Test::testJ_U, Test::changeJ); } }