diff options
4 files changed, 752 insertions, 29 deletions
diff --git a/compiler/optimizing/intrinsics_riscv64.cc b/compiler/optimizing/intrinsics_riscv64.cc index 7bd7faf482..10539f95f4 100644 --- a/compiler/optimizing/intrinsics_riscv64.cc +++ b/compiler/optimizing/intrinsics_riscv64.cc @@ -2322,22 +2322,15 @@ static void GenerateByteSwapAndExtract(CodeGeneratorRISCV64* codegen, XRegister rs1, XRegister shift, DataType::Type type) { - Riscv64Assembler* assembler = codegen->GetAssembler(); - // Do not apply shift in `GenerateReverseBytes()` for small types. + // Apply shift before `GenerateReverseBytes()` for small types. DCHECK_EQ(shift != kNoXRegister, DataType::Size(type) < 4u); - DataType::Type swap_type = (shift != kNoXRegister) ? DataType::Type::kInt32 : type; - // Also handles moving to FP registers. - GenerateReverseBytes(codegen, rd, rs1, swap_type); if (shift != kNoXRegister) { - DCHECK_EQ(rs1, rd.AsRegister<XRegister>()); - __ Sllw(rs1, rs1, shift); - if (type == DataType::Type::kUint16) { - __ Srliw(rs1, rs1, 16); - } else { - DCHECK_EQ(type, DataType::Type::kInt16); - __ Sraiw(rs1, rs1, 16); - } + Riscv64Assembler* assembler = codegen->GetAssembler(); + __ Srlw(rd.AsRegister<XRegister>(), rs1, shift); + rs1 = rd.AsRegister<XRegister>(); } + // Also handles moving to FP registers. + GenerateReverseBytes(codegen, rd, rs1, type); } static void GenerateVarHandleCompareAndSetOrExchange(HInvoke* invoke, @@ -2527,6 +2520,8 @@ static void GenerateVarHandleCompareAndSetOrExchange(HInvoke* invoke, if (return_success) { // Nothing to do, the result register already contains 1 on success and 0 on failure. } else if (byte_swap) { + DCHECK_IMPLIES(is_small, out.AsRegister<XRegister>() == old_value) + << " " << value_type << " " << out.AsRegister<XRegister>() << "!=" << old_value; GenerateByteSwapAndExtract(codegen, out, old_value, shift, value_type); } else if (is_fp) { codegen->MoveLocation(out, Location::RegisterLocation(old_value), value_type); @@ -2909,6 +2904,8 @@ static void GenerateVarHandleGetAndUpdate(HInvoke* invoke, GenerateGetAndUpdate( codegen, get_and_update_op, op_type, order, tmp_ptr, arg_reg, old_value, mask, temp); if (byte_swap) { + DCHECK_IMPLIES(is_small, out.AsRegister<XRegister>() == old_value) + << " " << value_type << " " << out.AsRegister<XRegister>() << "!=" << old_value; GenerateByteSwapAndExtract(codegen, out, old_value, shift, value_type); } else if (is_fp) { codegen->MoveLocation(out, Location::RegisterLocation(old_value), value_type); diff --git a/test/712-varhandle-invocations/expected-stdout.txt b/test/712-varhandle-invocations/expected-stdout.txt index 1ff1b30396..1c3e0a0a8b 100644 --- a/test/712-varhandle-invocations/expected-stdout.txt +++ b/test/712-varhandle-invocations/expected-stdout.txt @@ -1424,6 +1424,68 @@ ByteArrayViewLEGetAndBitwiseXorAcquireInt...OK ByteArrayViewLEGetAndBitwiseXorAcquireLong...OK ByteArrayViewLEGetAndBitwiseXorAcquireFloat...OK ByteArrayViewLEGetAndBitwiseXorAcquireDouble...OK +NarrowByteArrayViewLEGetShort...OK +NarrowByteArrayViewLEGetChar...OK +NarrowByteArrayViewLESetShort...OK +NarrowByteArrayViewLESetChar...OK +NarrowByteArrayViewLEGetVolatileShort...OK +NarrowByteArrayViewLEGetVolatileChar...OK +NarrowByteArrayViewLESetVolatileShort...OK +NarrowByteArrayViewLESetVolatileChar...OK +NarrowByteArrayViewLEGetAcquireShort...OK +NarrowByteArrayViewLEGetAcquireChar...OK +NarrowByteArrayViewLESetReleaseShort...OK +NarrowByteArrayViewLESetReleaseChar...OK +NarrowByteArrayViewLEGetOpaqueShort...OK +NarrowByteArrayViewLEGetOpaqueChar...OK +NarrowByteArrayViewLESetOpaqueShort...OK +NarrowByteArrayViewLESetOpaqueChar...OK +NarrowByteArrayViewLECompareAndSetShort...OK +NarrowByteArrayViewLECompareAndSetChar...OK +NarrowByteArrayViewLECompareAndExchangeShort...OK +NarrowByteArrayViewLECompareAndExchangeChar...OK +NarrowByteArrayViewLECompareAndExchangeAcquireShort...OK +NarrowByteArrayViewLECompareAndExchangeAcquireChar...OK +NarrowByteArrayViewLECompareAndExchangeReleaseShort...OK +NarrowByteArrayViewLECompareAndExchangeReleaseChar...OK +NarrowByteArrayViewLEWeakCompareAndSetPlainShort...OK +NarrowByteArrayViewLEWeakCompareAndSetPlainChar...OK +NarrowByteArrayViewLEWeakCompareAndSetShort...OK +NarrowByteArrayViewLEWeakCompareAndSetChar...OK +NarrowByteArrayViewLEWeakCompareAndSetAcquireShort...OK +NarrowByteArrayViewLEWeakCompareAndSetAcquireChar...OK +NarrowByteArrayViewLEWeakCompareAndSetReleaseShort...OK +NarrowByteArrayViewLEWeakCompareAndSetReleaseChar...OK +NarrowByteArrayViewLEGetAndSetShort...OK +NarrowByteArrayViewLEGetAndSetChar...OK +NarrowByteArrayViewLEGetAndSetAcquireShort...OK +NarrowByteArrayViewLEGetAndSetAcquireChar...OK +NarrowByteArrayViewLEGetAndSetReleaseShort...OK +NarrowByteArrayViewLEGetAndSetReleaseChar...OK +NarrowByteArrayViewLEGetAndAddShort...OK +NarrowByteArrayViewLEGetAndAddChar...OK +NarrowByteArrayViewLEGetAndAddAcquireShort...OK +NarrowByteArrayViewLEGetAndAddAcquireChar...OK +NarrowByteArrayViewLEGetAndAddReleaseShort...OK +NarrowByteArrayViewLEGetAndAddReleaseChar...OK +NarrowByteArrayViewLEGetAndBitwiseOrShort...OK +NarrowByteArrayViewLEGetAndBitwiseOrChar...OK +NarrowByteArrayViewLEGetAndBitwiseOrReleaseShort...OK +NarrowByteArrayViewLEGetAndBitwiseOrReleaseChar...OK +NarrowByteArrayViewLEGetAndBitwiseOrAcquireShort...OK +NarrowByteArrayViewLEGetAndBitwiseOrAcquireChar...OK +NarrowByteArrayViewLEGetAndBitwiseAndShort...OK +NarrowByteArrayViewLEGetAndBitwiseAndChar...OK +NarrowByteArrayViewLEGetAndBitwiseAndReleaseShort...OK +NarrowByteArrayViewLEGetAndBitwiseAndReleaseChar...OK +NarrowByteArrayViewLEGetAndBitwiseAndAcquireShort...OK +NarrowByteArrayViewLEGetAndBitwiseAndAcquireChar...OK +NarrowByteArrayViewLEGetAndBitwiseXorShort...OK +NarrowByteArrayViewLEGetAndBitwiseXorChar...OK +NarrowByteArrayViewLEGetAndBitwiseXorReleaseShort...OK +NarrowByteArrayViewLEGetAndBitwiseXorReleaseChar...OK +NarrowByteArrayViewLEGetAndBitwiseXorAcquireShort...OK +NarrowByteArrayViewLEGetAndBitwiseXorAcquireChar...OK ByteArrayViewBEGetShort...OK ByteArrayViewBEGetChar...OK ByteArrayViewBEGetInt...OK @@ -1610,6 +1672,68 @@ ByteArrayViewBEGetAndBitwiseXorAcquireInt...OK ByteArrayViewBEGetAndBitwiseXorAcquireLong...OK ByteArrayViewBEGetAndBitwiseXorAcquireFloat...OK ByteArrayViewBEGetAndBitwiseXorAcquireDouble...OK +NarrowByteArrayViewBEGetShort...OK +NarrowByteArrayViewBEGetChar...OK +NarrowByteArrayViewBESetShort...OK +NarrowByteArrayViewBESetChar...OK +NarrowByteArrayViewBEGetVolatileShort...OK +NarrowByteArrayViewBEGetVolatileChar...OK +NarrowByteArrayViewBESetVolatileShort...OK +NarrowByteArrayViewBESetVolatileChar...OK +NarrowByteArrayViewBEGetAcquireShort...OK +NarrowByteArrayViewBEGetAcquireChar...OK +NarrowByteArrayViewBESetReleaseShort...OK +NarrowByteArrayViewBESetReleaseChar...OK +NarrowByteArrayViewBEGetOpaqueShort...OK +NarrowByteArrayViewBEGetOpaqueChar...OK +NarrowByteArrayViewBESetOpaqueShort...OK +NarrowByteArrayViewBESetOpaqueChar...OK +NarrowByteArrayViewBECompareAndSetShort...OK +NarrowByteArrayViewBECompareAndSetChar...OK +NarrowByteArrayViewBECompareAndExchangeShort...OK +NarrowByteArrayViewBECompareAndExchangeChar...OK +NarrowByteArrayViewBECompareAndExchangeAcquireShort...OK +NarrowByteArrayViewBECompareAndExchangeAcquireChar...OK +NarrowByteArrayViewBECompareAndExchangeReleaseShort...OK +NarrowByteArrayViewBECompareAndExchangeReleaseChar...OK +NarrowByteArrayViewBEWeakCompareAndSetPlainShort...OK +NarrowByteArrayViewBEWeakCompareAndSetPlainChar...OK +NarrowByteArrayViewBEWeakCompareAndSetShort...OK +NarrowByteArrayViewBEWeakCompareAndSetChar...OK +NarrowByteArrayViewBEWeakCompareAndSetAcquireShort...OK +NarrowByteArrayViewBEWeakCompareAndSetAcquireChar...OK +NarrowByteArrayViewBEWeakCompareAndSetReleaseShort...OK +NarrowByteArrayViewBEWeakCompareAndSetReleaseChar...OK +NarrowByteArrayViewBEGetAndSetShort...OK +NarrowByteArrayViewBEGetAndSetChar...OK +NarrowByteArrayViewBEGetAndSetAcquireShort...OK +NarrowByteArrayViewBEGetAndSetAcquireChar...OK +NarrowByteArrayViewBEGetAndSetReleaseShort...OK +NarrowByteArrayViewBEGetAndSetReleaseChar...OK +NarrowByteArrayViewBEGetAndAddShort...OK +NarrowByteArrayViewBEGetAndAddChar...OK +NarrowByteArrayViewBEGetAndAddAcquireShort...OK +NarrowByteArrayViewBEGetAndAddAcquireChar...OK +NarrowByteArrayViewBEGetAndAddReleaseShort...OK +NarrowByteArrayViewBEGetAndAddReleaseChar...OK +NarrowByteArrayViewBEGetAndBitwiseOrShort...OK +NarrowByteArrayViewBEGetAndBitwiseOrChar...OK +NarrowByteArrayViewBEGetAndBitwiseOrReleaseShort...OK +NarrowByteArrayViewBEGetAndBitwiseOrReleaseChar...OK +NarrowByteArrayViewBEGetAndBitwiseOrAcquireShort...OK +NarrowByteArrayViewBEGetAndBitwiseOrAcquireChar...OK +NarrowByteArrayViewBEGetAndBitwiseAndShort...OK +NarrowByteArrayViewBEGetAndBitwiseAndChar...OK +NarrowByteArrayViewBEGetAndBitwiseAndReleaseShort...OK +NarrowByteArrayViewBEGetAndBitwiseAndReleaseChar...OK +NarrowByteArrayViewBEGetAndBitwiseAndAcquireShort...OK +NarrowByteArrayViewBEGetAndBitwiseAndAcquireChar...OK +NarrowByteArrayViewBEGetAndBitwiseXorShort...OK +NarrowByteArrayViewBEGetAndBitwiseXorChar...OK +NarrowByteArrayViewBEGetAndBitwiseXorReleaseShort...OK +NarrowByteArrayViewBEGetAndBitwiseXorReleaseChar...OK +NarrowByteArrayViewBEGetAndBitwiseXorAcquireShort...OK +NarrowByteArrayViewBEGetAndBitwiseXorAcquireChar...OK DirectByteBufferViewLEGetShort...OK DirectByteBufferViewLEGetChar...OK DirectByteBufferViewLEGetInt...OK @@ -1796,6 +1920,68 @@ DirectByteBufferViewLEGetAndBitwiseXorAcquireInt...OK DirectByteBufferViewLEGetAndBitwiseXorAcquireLong...OK DirectByteBufferViewLEGetAndBitwiseXorAcquireFloat...OK DirectByteBufferViewLEGetAndBitwiseXorAcquireDouble...OK +NarrowDirectByteBufferViewLEGetShort...OK +NarrowDirectByteBufferViewLEGetChar...OK +NarrowDirectByteBufferViewLESetShort...OK +NarrowDirectByteBufferViewLESetChar...OK +NarrowDirectByteBufferViewLEGetVolatileShort...OK +NarrowDirectByteBufferViewLEGetVolatileChar...OK +NarrowDirectByteBufferViewLESetVolatileShort...OK +NarrowDirectByteBufferViewLESetVolatileChar...OK +NarrowDirectByteBufferViewLEGetAcquireShort...OK +NarrowDirectByteBufferViewLEGetAcquireChar...OK +NarrowDirectByteBufferViewLESetReleaseShort...OK +NarrowDirectByteBufferViewLESetReleaseChar...OK +NarrowDirectByteBufferViewLEGetOpaqueShort...OK +NarrowDirectByteBufferViewLEGetOpaqueChar...OK +NarrowDirectByteBufferViewLESetOpaqueShort...OK +NarrowDirectByteBufferViewLESetOpaqueChar...OK +NarrowDirectByteBufferViewLECompareAndSetShort...OK +NarrowDirectByteBufferViewLECompareAndSetChar...OK +NarrowDirectByteBufferViewLECompareAndExchangeShort...OK +NarrowDirectByteBufferViewLECompareAndExchangeChar...OK +NarrowDirectByteBufferViewLECompareAndExchangeAcquireShort...OK +NarrowDirectByteBufferViewLECompareAndExchangeAcquireChar...OK +NarrowDirectByteBufferViewLECompareAndExchangeReleaseShort...OK +NarrowDirectByteBufferViewLECompareAndExchangeReleaseChar...OK +NarrowDirectByteBufferViewLEWeakCompareAndSetPlainShort...OK +NarrowDirectByteBufferViewLEWeakCompareAndSetPlainChar...OK +NarrowDirectByteBufferViewLEWeakCompareAndSetShort...OK +NarrowDirectByteBufferViewLEWeakCompareAndSetChar...OK +NarrowDirectByteBufferViewLEWeakCompareAndSetAcquireShort...OK +NarrowDirectByteBufferViewLEWeakCompareAndSetAcquireChar...OK +NarrowDirectByteBufferViewLEWeakCompareAndSetReleaseShort...OK +NarrowDirectByteBufferViewLEWeakCompareAndSetReleaseChar...OK +NarrowDirectByteBufferViewLEGetAndSetShort...OK +NarrowDirectByteBufferViewLEGetAndSetChar...OK +NarrowDirectByteBufferViewLEGetAndSetAcquireShort...OK +NarrowDirectByteBufferViewLEGetAndSetAcquireChar...OK +NarrowDirectByteBufferViewLEGetAndSetReleaseShort...OK +NarrowDirectByteBufferViewLEGetAndSetReleaseChar...OK +NarrowDirectByteBufferViewLEGetAndAddShort...OK +NarrowDirectByteBufferViewLEGetAndAddChar...OK +NarrowDirectByteBufferViewLEGetAndAddAcquireShort...OK +NarrowDirectByteBufferViewLEGetAndAddAcquireChar...OK +NarrowDirectByteBufferViewLEGetAndAddReleaseShort...OK +NarrowDirectByteBufferViewLEGetAndAddReleaseChar...OK +NarrowDirectByteBufferViewLEGetAndBitwiseOrShort...OK +NarrowDirectByteBufferViewLEGetAndBitwiseOrChar...OK +NarrowDirectByteBufferViewLEGetAndBitwiseOrReleaseShort...OK +NarrowDirectByteBufferViewLEGetAndBitwiseOrReleaseChar...OK +NarrowDirectByteBufferViewLEGetAndBitwiseOrAcquireShort...OK +NarrowDirectByteBufferViewLEGetAndBitwiseOrAcquireChar...OK +NarrowDirectByteBufferViewLEGetAndBitwiseAndShort...OK +NarrowDirectByteBufferViewLEGetAndBitwiseAndChar...OK +NarrowDirectByteBufferViewLEGetAndBitwiseAndReleaseShort...OK +NarrowDirectByteBufferViewLEGetAndBitwiseAndReleaseChar...OK +NarrowDirectByteBufferViewLEGetAndBitwiseAndAcquireShort...OK +NarrowDirectByteBufferViewLEGetAndBitwiseAndAcquireChar...OK +NarrowDirectByteBufferViewLEGetAndBitwiseXorShort...OK +NarrowDirectByteBufferViewLEGetAndBitwiseXorChar...OK +NarrowDirectByteBufferViewLEGetAndBitwiseXorReleaseShort...OK +NarrowDirectByteBufferViewLEGetAndBitwiseXorReleaseChar...OK +NarrowDirectByteBufferViewLEGetAndBitwiseXorAcquireShort...OK +NarrowDirectByteBufferViewLEGetAndBitwiseXorAcquireChar...OK DirectByteBufferViewBEGetShort...OK DirectByteBufferViewBEGetChar...OK DirectByteBufferViewBEGetInt...OK @@ -1982,6 +2168,68 @@ DirectByteBufferViewBEGetAndBitwiseXorAcquireInt...OK DirectByteBufferViewBEGetAndBitwiseXorAcquireLong...OK DirectByteBufferViewBEGetAndBitwiseXorAcquireFloat...OK DirectByteBufferViewBEGetAndBitwiseXorAcquireDouble...OK +NarrowDirectByteBufferViewBEGetShort...OK +NarrowDirectByteBufferViewBEGetChar...OK +NarrowDirectByteBufferViewBESetShort...OK +NarrowDirectByteBufferViewBESetChar...OK +NarrowDirectByteBufferViewBEGetVolatileShort...OK +NarrowDirectByteBufferViewBEGetVolatileChar...OK +NarrowDirectByteBufferViewBESetVolatileShort...OK +NarrowDirectByteBufferViewBESetVolatileChar...OK +NarrowDirectByteBufferViewBEGetAcquireShort...OK +NarrowDirectByteBufferViewBEGetAcquireChar...OK +NarrowDirectByteBufferViewBESetReleaseShort...OK +NarrowDirectByteBufferViewBESetReleaseChar...OK +NarrowDirectByteBufferViewBEGetOpaqueShort...OK +NarrowDirectByteBufferViewBEGetOpaqueChar...OK +NarrowDirectByteBufferViewBESetOpaqueShort...OK +NarrowDirectByteBufferViewBESetOpaqueChar...OK +NarrowDirectByteBufferViewBECompareAndSetShort...OK +NarrowDirectByteBufferViewBECompareAndSetChar...OK +NarrowDirectByteBufferViewBECompareAndExchangeShort...OK +NarrowDirectByteBufferViewBECompareAndExchangeChar...OK +NarrowDirectByteBufferViewBECompareAndExchangeAcquireShort...OK +NarrowDirectByteBufferViewBECompareAndExchangeAcquireChar...OK +NarrowDirectByteBufferViewBECompareAndExchangeReleaseShort...OK +NarrowDirectByteBufferViewBECompareAndExchangeReleaseChar...OK +NarrowDirectByteBufferViewBEWeakCompareAndSetPlainShort...OK +NarrowDirectByteBufferViewBEWeakCompareAndSetPlainChar...OK +NarrowDirectByteBufferViewBEWeakCompareAndSetShort...OK +NarrowDirectByteBufferViewBEWeakCompareAndSetChar...OK +NarrowDirectByteBufferViewBEWeakCompareAndSetAcquireShort...OK +NarrowDirectByteBufferViewBEWeakCompareAndSetAcquireChar...OK +NarrowDirectByteBufferViewBEWeakCompareAndSetReleaseShort...OK +NarrowDirectByteBufferViewBEWeakCompareAndSetReleaseChar...OK +NarrowDirectByteBufferViewBEGetAndSetShort...OK +NarrowDirectByteBufferViewBEGetAndSetChar...OK +NarrowDirectByteBufferViewBEGetAndSetAcquireShort...OK +NarrowDirectByteBufferViewBEGetAndSetAcquireChar...OK +NarrowDirectByteBufferViewBEGetAndSetReleaseShort...OK +NarrowDirectByteBufferViewBEGetAndSetReleaseChar...OK +NarrowDirectByteBufferViewBEGetAndAddShort...OK +NarrowDirectByteBufferViewBEGetAndAddChar...OK +NarrowDirectByteBufferViewBEGetAndAddAcquireShort...OK +NarrowDirectByteBufferViewBEGetAndAddAcquireChar...OK +NarrowDirectByteBufferViewBEGetAndAddReleaseShort...OK +NarrowDirectByteBufferViewBEGetAndAddReleaseChar...OK +NarrowDirectByteBufferViewBEGetAndBitwiseOrShort...OK +NarrowDirectByteBufferViewBEGetAndBitwiseOrChar...OK +NarrowDirectByteBufferViewBEGetAndBitwiseOrReleaseShort...OK +NarrowDirectByteBufferViewBEGetAndBitwiseOrReleaseChar...OK +NarrowDirectByteBufferViewBEGetAndBitwiseOrAcquireShort...OK +NarrowDirectByteBufferViewBEGetAndBitwiseOrAcquireChar...OK +NarrowDirectByteBufferViewBEGetAndBitwiseAndShort...OK +NarrowDirectByteBufferViewBEGetAndBitwiseAndChar...OK +NarrowDirectByteBufferViewBEGetAndBitwiseAndReleaseShort...OK +NarrowDirectByteBufferViewBEGetAndBitwiseAndReleaseChar...OK +NarrowDirectByteBufferViewBEGetAndBitwiseAndAcquireShort...OK +NarrowDirectByteBufferViewBEGetAndBitwiseAndAcquireChar...OK +NarrowDirectByteBufferViewBEGetAndBitwiseXorShort...OK +NarrowDirectByteBufferViewBEGetAndBitwiseXorChar...OK +NarrowDirectByteBufferViewBEGetAndBitwiseXorReleaseShort...OK +NarrowDirectByteBufferViewBEGetAndBitwiseXorReleaseChar...OK +NarrowDirectByteBufferViewBEGetAndBitwiseXorAcquireShort...OK +NarrowDirectByteBufferViewBEGetAndBitwiseXorAcquireChar...OK HeapByteBufferViewLEGetShort...OK HeapByteBufferViewLEGetChar...OK HeapByteBufferViewLEGetInt...OK @@ -2168,6 +2416,68 @@ HeapByteBufferViewLEGetAndBitwiseXorAcquireInt...OK HeapByteBufferViewLEGetAndBitwiseXorAcquireLong...OK HeapByteBufferViewLEGetAndBitwiseXorAcquireFloat...OK HeapByteBufferViewLEGetAndBitwiseXorAcquireDouble...OK +NarrowHeapByteBufferViewLEGetShort...OK +NarrowHeapByteBufferViewLEGetChar...OK +NarrowHeapByteBufferViewLESetShort...OK +NarrowHeapByteBufferViewLESetChar...OK +NarrowHeapByteBufferViewLEGetVolatileShort...OK +NarrowHeapByteBufferViewLEGetVolatileChar...OK +NarrowHeapByteBufferViewLESetVolatileShort...OK +NarrowHeapByteBufferViewLESetVolatileChar...OK +NarrowHeapByteBufferViewLEGetAcquireShort...OK +NarrowHeapByteBufferViewLEGetAcquireChar...OK +NarrowHeapByteBufferViewLESetReleaseShort...OK +NarrowHeapByteBufferViewLESetReleaseChar...OK +NarrowHeapByteBufferViewLEGetOpaqueShort...OK +NarrowHeapByteBufferViewLEGetOpaqueChar...OK +NarrowHeapByteBufferViewLESetOpaqueShort...OK +NarrowHeapByteBufferViewLESetOpaqueChar...OK +NarrowHeapByteBufferViewLECompareAndSetShort...OK +NarrowHeapByteBufferViewLECompareAndSetChar...OK +NarrowHeapByteBufferViewLECompareAndExchangeShort...OK +NarrowHeapByteBufferViewLECompareAndExchangeChar...OK +NarrowHeapByteBufferViewLECompareAndExchangeAcquireShort...OK +NarrowHeapByteBufferViewLECompareAndExchangeAcquireChar...OK +NarrowHeapByteBufferViewLECompareAndExchangeReleaseShort...OK +NarrowHeapByteBufferViewLECompareAndExchangeReleaseChar...OK +NarrowHeapByteBufferViewLEWeakCompareAndSetPlainShort...OK +NarrowHeapByteBufferViewLEWeakCompareAndSetPlainChar...OK +NarrowHeapByteBufferViewLEWeakCompareAndSetShort...OK +NarrowHeapByteBufferViewLEWeakCompareAndSetChar...OK +NarrowHeapByteBufferViewLEWeakCompareAndSetAcquireShort...OK +NarrowHeapByteBufferViewLEWeakCompareAndSetAcquireChar...OK +NarrowHeapByteBufferViewLEWeakCompareAndSetReleaseShort...OK +NarrowHeapByteBufferViewLEWeakCompareAndSetReleaseChar...OK +NarrowHeapByteBufferViewLEGetAndSetShort...OK +NarrowHeapByteBufferViewLEGetAndSetChar...OK +NarrowHeapByteBufferViewLEGetAndSetAcquireShort...OK +NarrowHeapByteBufferViewLEGetAndSetAcquireChar...OK +NarrowHeapByteBufferViewLEGetAndSetReleaseShort...OK +NarrowHeapByteBufferViewLEGetAndSetReleaseChar...OK +NarrowHeapByteBufferViewLEGetAndAddShort...OK +NarrowHeapByteBufferViewLEGetAndAddChar...OK +NarrowHeapByteBufferViewLEGetAndAddAcquireShort...OK +NarrowHeapByteBufferViewLEGetAndAddAcquireChar...OK +NarrowHeapByteBufferViewLEGetAndAddReleaseShort...OK +NarrowHeapByteBufferViewLEGetAndAddReleaseChar...OK +NarrowHeapByteBufferViewLEGetAndBitwiseOrShort...OK +NarrowHeapByteBufferViewLEGetAndBitwiseOrChar...OK +NarrowHeapByteBufferViewLEGetAndBitwiseOrReleaseShort...OK +NarrowHeapByteBufferViewLEGetAndBitwiseOrReleaseChar...OK +NarrowHeapByteBufferViewLEGetAndBitwiseOrAcquireShort...OK +NarrowHeapByteBufferViewLEGetAndBitwiseOrAcquireChar...OK +NarrowHeapByteBufferViewLEGetAndBitwiseAndShort...OK +NarrowHeapByteBufferViewLEGetAndBitwiseAndChar...OK +NarrowHeapByteBufferViewLEGetAndBitwiseAndReleaseShort...OK +NarrowHeapByteBufferViewLEGetAndBitwiseAndReleaseChar...OK +NarrowHeapByteBufferViewLEGetAndBitwiseAndAcquireShort...OK +NarrowHeapByteBufferViewLEGetAndBitwiseAndAcquireChar...OK +NarrowHeapByteBufferViewLEGetAndBitwiseXorShort...OK +NarrowHeapByteBufferViewLEGetAndBitwiseXorChar...OK +NarrowHeapByteBufferViewLEGetAndBitwiseXorReleaseShort...OK +NarrowHeapByteBufferViewLEGetAndBitwiseXorReleaseChar...OK +NarrowHeapByteBufferViewLEGetAndBitwiseXorAcquireShort...OK +NarrowHeapByteBufferViewLEGetAndBitwiseXorAcquireChar...OK HeapByteBufferViewBEGetShort...OK HeapByteBufferViewBEGetChar...OK HeapByteBufferViewBEGetInt...OK @@ -2354,6 +2664,68 @@ HeapByteBufferViewBEGetAndBitwiseXorAcquireInt...OK HeapByteBufferViewBEGetAndBitwiseXorAcquireLong...OK HeapByteBufferViewBEGetAndBitwiseXorAcquireFloat...OK HeapByteBufferViewBEGetAndBitwiseXorAcquireDouble...OK +NarrowHeapByteBufferViewBEGetShort...OK +NarrowHeapByteBufferViewBEGetChar...OK +NarrowHeapByteBufferViewBESetShort...OK +NarrowHeapByteBufferViewBESetChar...OK +NarrowHeapByteBufferViewBEGetVolatileShort...OK +NarrowHeapByteBufferViewBEGetVolatileChar...OK +NarrowHeapByteBufferViewBESetVolatileShort...OK +NarrowHeapByteBufferViewBESetVolatileChar...OK +NarrowHeapByteBufferViewBEGetAcquireShort...OK +NarrowHeapByteBufferViewBEGetAcquireChar...OK +NarrowHeapByteBufferViewBESetReleaseShort...OK +NarrowHeapByteBufferViewBESetReleaseChar...OK +NarrowHeapByteBufferViewBEGetOpaqueShort...OK +NarrowHeapByteBufferViewBEGetOpaqueChar...OK +NarrowHeapByteBufferViewBESetOpaqueShort...OK +NarrowHeapByteBufferViewBESetOpaqueChar...OK +NarrowHeapByteBufferViewBECompareAndSetShort...OK +NarrowHeapByteBufferViewBECompareAndSetChar...OK +NarrowHeapByteBufferViewBECompareAndExchangeShort...OK +NarrowHeapByteBufferViewBECompareAndExchangeChar...OK +NarrowHeapByteBufferViewBECompareAndExchangeAcquireShort...OK +NarrowHeapByteBufferViewBECompareAndExchangeAcquireChar...OK +NarrowHeapByteBufferViewBECompareAndExchangeReleaseShort...OK +NarrowHeapByteBufferViewBECompareAndExchangeReleaseChar...OK +NarrowHeapByteBufferViewBEWeakCompareAndSetPlainShort...OK +NarrowHeapByteBufferViewBEWeakCompareAndSetPlainChar...OK +NarrowHeapByteBufferViewBEWeakCompareAndSetShort...OK +NarrowHeapByteBufferViewBEWeakCompareAndSetChar...OK +NarrowHeapByteBufferViewBEWeakCompareAndSetAcquireShort...OK +NarrowHeapByteBufferViewBEWeakCompareAndSetAcquireChar...OK +NarrowHeapByteBufferViewBEWeakCompareAndSetReleaseShort...OK +NarrowHeapByteBufferViewBEWeakCompareAndSetReleaseChar...OK +NarrowHeapByteBufferViewBEGetAndSetShort...OK +NarrowHeapByteBufferViewBEGetAndSetChar...OK +NarrowHeapByteBufferViewBEGetAndSetAcquireShort...OK +NarrowHeapByteBufferViewBEGetAndSetAcquireChar...OK +NarrowHeapByteBufferViewBEGetAndSetReleaseShort...OK +NarrowHeapByteBufferViewBEGetAndSetReleaseChar...OK +NarrowHeapByteBufferViewBEGetAndAddShort...OK +NarrowHeapByteBufferViewBEGetAndAddChar...OK +NarrowHeapByteBufferViewBEGetAndAddAcquireShort...OK +NarrowHeapByteBufferViewBEGetAndAddAcquireChar...OK +NarrowHeapByteBufferViewBEGetAndAddReleaseShort...OK +NarrowHeapByteBufferViewBEGetAndAddReleaseChar...OK +NarrowHeapByteBufferViewBEGetAndBitwiseOrShort...OK +NarrowHeapByteBufferViewBEGetAndBitwiseOrChar...OK +NarrowHeapByteBufferViewBEGetAndBitwiseOrReleaseShort...OK +NarrowHeapByteBufferViewBEGetAndBitwiseOrReleaseChar...OK +NarrowHeapByteBufferViewBEGetAndBitwiseOrAcquireShort...OK +NarrowHeapByteBufferViewBEGetAndBitwiseOrAcquireChar...OK +NarrowHeapByteBufferViewBEGetAndBitwiseAndShort...OK +NarrowHeapByteBufferViewBEGetAndBitwiseAndChar...OK +NarrowHeapByteBufferViewBEGetAndBitwiseAndReleaseShort...OK +NarrowHeapByteBufferViewBEGetAndBitwiseAndReleaseChar...OK +NarrowHeapByteBufferViewBEGetAndBitwiseAndAcquireShort...OK +NarrowHeapByteBufferViewBEGetAndBitwiseAndAcquireChar...OK +NarrowHeapByteBufferViewBEGetAndBitwiseXorShort...OK +NarrowHeapByteBufferViewBEGetAndBitwiseXorChar...OK +NarrowHeapByteBufferViewBEGetAndBitwiseXorReleaseShort...OK +NarrowHeapByteBufferViewBEGetAndBitwiseXorReleaseChar...OK +NarrowHeapByteBufferViewBEGetAndBitwiseXorAcquireShort...OK +NarrowHeapByteBufferViewBEGetAndBitwiseXorAcquireChar...OK HeapByteBufferReadOnlyViewLEGetShort...OK HeapByteBufferReadOnlyViewLEGetChar...OK HeapByteBufferReadOnlyViewLEGetInt...OK @@ -2540,6 +2912,68 @@ HeapByteBufferReadOnlyViewLEGetAndBitwiseXorAcquireInt...OK HeapByteBufferReadOnlyViewLEGetAndBitwiseXorAcquireLong...OK HeapByteBufferReadOnlyViewLEGetAndBitwiseXorAcquireFloat...OK HeapByteBufferReadOnlyViewLEGetAndBitwiseXorAcquireDouble...OK +NarrowHeapByteBufferReadOnlyViewLEGetShort...OK +NarrowHeapByteBufferReadOnlyViewLEGetChar...OK +NarrowHeapByteBufferReadOnlyViewLESetShort...OK +NarrowHeapByteBufferReadOnlyViewLESetChar...OK +NarrowHeapByteBufferReadOnlyViewLEGetVolatileShort...OK +NarrowHeapByteBufferReadOnlyViewLEGetVolatileChar...OK +NarrowHeapByteBufferReadOnlyViewLESetVolatileShort...OK +NarrowHeapByteBufferReadOnlyViewLESetVolatileChar...OK +NarrowHeapByteBufferReadOnlyViewLEGetAcquireShort...OK +NarrowHeapByteBufferReadOnlyViewLEGetAcquireChar...OK +NarrowHeapByteBufferReadOnlyViewLESetReleaseShort...OK +NarrowHeapByteBufferReadOnlyViewLESetReleaseChar...OK +NarrowHeapByteBufferReadOnlyViewLEGetOpaqueShort...OK +NarrowHeapByteBufferReadOnlyViewLEGetOpaqueChar...OK +NarrowHeapByteBufferReadOnlyViewLESetOpaqueShort...OK +NarrowHeapByteBufferReadOnlyViewLESetOpaqueChar...OK +NarrowHeapByteBufferReadOnlyViewLECompareAndSetShort...OK +NarrowHeapByteBufferReadOnlyViewLECompareAndSetChar...OK +NarrowHeapByteBufferReadOnlyViewLECompareAndExchangeShort...OK +NarrowHeapByteBufferReadOnlyViewLECompareAndExchangeChar...OK +NarrowHeapByteBufferReadOnlyViewLECompareAndExchangeAcquireShort...OK +NarrowHeapByteBufferReadOnlyViewLECompareAndExchangeAcquireChar...OK +NarrowHeapByteBufferReadOnlyViewLECompareAndExchangeReleaseShort...OK +NarrowHeapByteBufferReadOnlyViewLECompareAndExchangeReleaseChar...OK +NarrowHeapByteBufferReadOnlyViewLEWeakCompareAndSetPlainShort...OK +NarrowHeapByteBufferReadOnlyViewLEWeakCompareAndSetPlainChar...OK +NarrowHeapByteBufferReadOnlyViewLEWeakCompareAndSetShort...OK +NarrowHeapByteBufferReadOnlyViewLEWeakCompareAndSetChar...OK +NarrowHeapByteBufferReadOnlyViewLEWeakCompareAndSetAcquireShort...OK +NarrowHeapByteBufferReadOnlyViewLEWeakCompareAndSetAcquireChar...OK +NarrowHeapByteBufferReadOnlyViewLEWeakCompareAndSetReleaseShort...OK +NarrowHeapByteBufferReadOnlyViewLEWeakCompareAndSetReleaseChar...OK +NarrowHeapByteBufferReadOnlyViewLEGetAndSetShort...OK +NarrowHeapByteBufferReadOnlyViewLEGetAndSetChar...OK +NarrowHeapByteBufferReadOnlyViewLEGetAndSetAcquireShort...OK +NarrowHeapByteBufferReadOnlyViewLEGetAndSetAcquireChar...OK +NarrowHeapByteBufferReadOnlyViewLEGetAndSetReleaseShort...OK +NarrowHeapByteBufferReadOnlyViewLEGetAndSetReleaseChar...OK +NarrowHeapByteBufferReadOnlyViewLEGetAndAddShort...OK +NarrowHeapByteBufferReadOnlyViewLEGetAndAddChar...OK +NarrowHeapByteBufferReadOnlyViewLEGetAndAddAcquireShort...OK +NarrowHeapByteBufferReadOnlyViewLEGetAndAddAcquireChar...OK +NarrowHeapByteBufferReadOnlyViewLEGetAndAddReleaseShort...OK +NarrowHeapByteBufferReadOnlyViewLEGetAndAddReleaseChar...OK +NarrowHeapByteBufferReadOnlyViewLEGetAndBitwiseOrShort...OK +NarrowHeapByteBufferReadOnlyViewLEGetAndBitwiseOrChar...OK +NarrowHeapByteBufferReadOnlyViewLEGetAndBitwiseOrReleaseShort...OK +NarrowHeapByteBufferReadOnlyViewLEGetAndBitwiseOrReleaseChar...OK +NarrowHeapByteBufferReadOnlyViewLEGetAndBitwiseOrAcquireShort...OK +NarrowHeapByteBufferReadOnlyViewLEGetAndBitwiseOrAcquireChar...OK +NarrowHeapByteBufferReadOnlyViewLEGetAndBitwiseAndShort...OK +NarrowHeapByteBufferReadOnlyViewLEGetAndBitwiseAndChar...OK +NarrowHeapByteBufferReadOnlyViewLEGetAndBitwiseAndReleaseShort...OK +NarrowHeapByteBufferReadOnlyViewLEGetAndBitwiseAndReleaseChar...OK +NarrowHeapByteBufferReadOnlyViewLEGetAndBitwiseAndAcquireShort...OK +NarrowHeapByteBufferReadOnlyViewLEGetAndBitwiseAndAcquireChar...OK +NarrowHeapByteBufferReadOnlyViewLEGetAndBitwiseXorShort...OK +NarrowHeapByteBufferReadOnlyViewLEGetAndBitwiseXorChar...OK +NarrowHeapByteBufferReadOnlyViewLEGetAndBitwiseXorReleaseShort...OK +NarrowHeapByteBufferReadOnlyViewLEGetAndBitwiseXorReleaseChar...OK +NarrowHeapByteBufferReadOnlyViewLEGetAndBitwiseXorAcquireShort...OK +NarrowHeapByteBufferReadOnlyViewLEGetAndBitwiseXorAcquireChar...OK HeapByteBufferReadOnlyViewBEGetShort...OK HeapByteBufferReadOnlyViewBEGetChar...OK HeapByteBufferReadOnlyViewBEGetInt...OK @@ -2726,6 +3160,68 @@ HeapByteBufferReadOnlyViewBEGetAndBitwiseXorAcquireInt...OK HeapByteBufferReadOnlyViewBEGetAndBitwiseXorAcquireLong...OK HeapByteBufferReadOnlyViewBEGetAndBitwiseXorAcquireFloat...OK HeapByteBufferReadOnlyViewBEGetAndBitwiseXorAcquireDouble...OK +NarrowHeapByteBufferReadOnlyViewBEGetShort...OK +NarrowHeapByteBufferReadOnlyViewBEGetChar...OK +NarrowHeapByteBufferReadOnlyViewBESetShort...OK +NarrowHeapByteBufferReadOnlyViewBESetChar...OK +NarrowHeapByteBufferReadOnlyViewBEGetVolatileShort...OK +NarrowHeapByteBufferReadOnlyViewBEGetVolatileChar...OK +NarrowHeapByteBufferReadOnlyViewBESetVolatileShort...OK +NarrowHeapByteBufferReadOnlyViewBESetVolatileChar...OK +NarrowHeapByteBufferReadOnlyViewBEGetAcquireShort...OK +NarrowHeapByteBufferReadOnlyViewBEGetAcquireChar...OK +NarrowHeapByteBufferReadOnlyViewBESetReleaseShort...OK +NarrowHeapByteBufferReadOnlyViewBESetReleaseChar...OK +NarrowHeapByteBufferReadOnlyViewBEGetOpaqueShort...OK +NarrowHeapByteBufferReadOnlyViewBEGetOpaqueChar...OK +NarrowHeapByteBufferReadOnlyViewBESetOpaqueShort...OK +NarrowHeapByteBufferReadOnlyViewBESetOpaqueChar...OK +NarrowHeapByteBufferReadOnlyViewBECompareAndSetShort...OK +NarrowHeapByteBufferReadOnlyViewBECompareAndSetChar...OK +NarrowHeapByteBufferReadOnlyViewBECompareAndExchangeShort...OK +NarrowHeapByteBufferReadOnlyViewBECompareAndExchangeChar...OK +NarrowHeapByteBufferReadOnlyViewBECompareAndExchangeAcquireShort...OK +NarrowHeapByteBufferReadOnlyViewBECompareAndExchangeAcquireChar...OK +NarrowHeapByteBufferReadOnlyViewBECompareAndExchangeReleaseShort...OK +NarrowHeapByteBufferReadOnlyViewBECompareAndExchangeReleaseChar...OK +NarrowHeapByteBufferReadOnlyViewBEWeakCompareAndSetPlainShort...OK +NarrowHeapByteBufferReadOnlyViewBEWeakCompareAndSetPlainChar...OK +NarrowHeapByteBufferReadOnlyViewBEWeakCompareAndSetShort...OK +NarrowHeapByteBufferReadOnlyViewBEWeakCompareAndSetChar...OK +NarrowHeapByteBufferReadOnlyViewBEWeakCompareAndSetAcquireShort...OK +NarrowHeapByteBufferReadOnlyViewBEWeakCompareAndSetAcquireChar...OK +NarrowHeapByteBufferReadOnlyViewBEWeakCompareAndSetReleaseShort...OK +NarrowHeapByteBufferReadOnlyViewBEWeakCompareAndSetReleaseChar...OK +NarrowHeapByteBufferReadOnlyViewBEGetAndSetShort...OK +NarrowHeapByteBufferReadOnlyViewBEGetAndSetChar...OK +NarrowHeapByteBufferReadOnlyViewBEGetAndSetAcquireShort...OK +NarrowHeapByteBufferReadOnlyViewBEGetAndSetAcquireChar...OK +NarrowHeapByteBufferReadOnlyViewBEGetAndSetReleaseShort...OK +NarrowHeapByteBufferReadOnlyViewBEGetAndSetReleaseChar...OK +NarrowHeapByteBufferReadOnlyViewBEGetAndAddShort...OK +NarrowHeapByteBufferReadOnlyViewBEGetAndAddChar...OK +NarrowHeapByteBufferReadOnlyViewBEGetAndAddAcquireShort...OK +NarrowHeapByteBufferReadOnlyViewBEGetAndAddAcquireChar...OK +NarrowHeapByteBufferReadOnlyViewBEGetAndAddReleaseShort...OK +NarrowHeapByteBufferReadOnlyViewBEGetAndAddReleaseChar...OK +NarrowHeapByteBufferReadOnlyViewBEGetAndBitwiseOrShort...OK +NarrowHeapByteBufferReadOnlyViewBEGetAndBitwiseOrChar...OK +NarrowHeapByteBufferReadOnlyViewBEGetAndBitwiseOrReleaseShort...OK +NarrowHeapByteBufferReadOnlyViewBEGetAndBitwiseOrReleaseChar...OK +NarrowHeapByteBufferReadOnlyViewBEGetAndBitwiseOrAcquireShort...OK +NarrowHeapByteBufferReadOnlyViewBEGetAndBitwiseOrAcquireChar...OK +NarrowHeapByteBufferReadOnlyViewBEGetAndBitwiseAndShort...OK +NarrowHeapByteBufferReadOnlyViewBEGetAndBitwiseAndChar...OK +NarrowHeapByteBufferReadOnlyViewBEGetAndBitwiseAndReleaseShort...OK +NarrowHeapByteBufferReadOnlyViewBEGetAndBitwiseAndReleaseChar...OK +NarrowHeapByteBufferReadOnlyViewBEGetAndBitwiseAndAcquireShort...OK +NarrowHeapByteBufferReadOnlyViewBEGetAndBitwiseAndAcquireChar...OK +NarrowHeapByteBufferReadOnlyViewBEGetAndBitwiseXorShort...OK +NarrowHeapByteBufferReadOnlyViewBEGetAndBitwiseXorChar...OK +NarrowHeapByteBufferReadOnlyViewBEGetAndBitwiseXorReleaseShort...OK +NarrowHeapByteBufferReadOnlyViewBEGetAndBitwiseXorReleaseChar...OK +NarrowHeapByteBufferReadOnlyViewBEGetAndBitwiseXorAcquireShort...OK +NarrowHeapByteBufferReadOnlyViewBEGetAndBitwiseXorAcquireChar...OK FieldGetWidget...OK FieldSetWidget...OK FieldGetVolatileWidget...OK @@ -3339,4 +3835,4 @@ SubtypeTest...OK SupertypeTest...OK InterfaceTest...OK ImplicitBoxingIntegerTest...OK -3341 successes, 0 skips, 0 failures. +3837 successes, 0 skips, 0 failures. diff --git a/test/712-varhandle-invocations/src/VarHandleUnitTestHelpers.java b/test/712-varhandle-invocations/src/VarHandleUnitTestHelpers.java index 6f72e9962f..4cd86367fb 100644 --- a/test/712-varhandle-invocations/src/VarHandleUnitTestHelpers.java +++ b/test/712-varhandle-invocations/src/VarHandleUnitTestHelpers.java @@ -53,6 +53,14 @@ public class VarHandleUnitTestHelpers { } } + public static byte[] createFilledByteArray(int size) { + byte[] array = new byte[size]; + for (int i = 0; i != size; ++i) { + array[i] = (byte) (i * 47 + 11); + } + return array; + } + public static boolean getBytesAs_boolean(byte[] array, int index, ByteOrder order) { return getBytesAs_boolean(ByteBuffer.wrap(array), index, order); } diff --git a/test/712-varhandle-invocations/util-src/generate_java.py b/test/712-varhandle-invocations/util-src/generate_java.py index 763fb201e9..e32cee9763 100644 --- a/test/712-varhandle-invocations/util-src/generate_java.py +++ b/test/712-varhandle-invocations/util-src/generate_java.py @@ -84,6 +84,8 @@ FLOAT_TYPE=ValueType("float", "Float", [ "-7.77e23f", "1.234e-17f", "3.40e36f", DOUBLE_TYPE=ValueType("double", "Double", [ "-1.0e-200", "1.11e200", "3.141", "1.1111", "6.022e23", "6.626e-34" ], ordinal=7, width=4, supports_bitwise=False) VALUE_TYPES = { BOOLEAN_TYPE, BYTE_TYPE, SHORT_TYPE, CHAR_TYPE, INT_TYPE, LONG_TYPE, FLOAT_TYPE, DOUBLE_TYPE } +VIEW_SUPPORTED_TYPES = list(filter(lambda x : x.width >= 2, VALUE_TYPES)) +VIEW_SUPPORTED_NARROW_TYPES = list(filter(lambda x : x.width == 2, VALUE_TYPES)) WIDENING_CONVERSIONS = { BOOLEAN_TYPE : set(), @@ -104,11 +106,9 @@ def types_that_widen_to(var_type): return types_that_widen class VarHandleKind(object): - ALL_SUPPORTED_TYPES = VALUE_TYPES - VIEW_SUPPORTED_TYPES = list(filter(lambda x : x.width >= 2, ALL_SUPPORTED_TYPES)) - - def __init__(self, name, imports=[], declarations=[], lookup='', coordinates=[], get_value='', may_throw_read_only=False): + def __init__(self, name, supported_types=[], imports=[], declarations=[], lookup='', coordinates=[], get_value='', may_throw_read_only=False): self.name = name + self.supported_types = supported_types self.imports = imports self.declarations = declarations self.lookup = lookup @@ -132,7 +132,7 @@ class VarHandleKind(object): return Template(self.lookup).safe_substitute(dictionary) def get_supported_types(self): - return VarHandleKind.VIEW_SUPPORTED_TYPES if self.is_view() else VarHandleKind.ALL_SUPPORTED_TYPES + return self.supported_types def is_view(self): return "View" in self.name @@ -141,6 +141,7 @@ class VarHandleKind(object): return Template(self.get_value_).safe_substitute(dictionary) FIELD_VAR_HANDLE = VarHandleKind("Field", + VALUE_TYPES, [ 'java.lang.invoke.MethodHandles', 'java.lang.invoke.VarHandle' @@ -156,6 +157,7 @@ FIELD_VAR_HANDLE = VarHandleKind("Field", may_throw_read_only = False) FINAL_FIELD_VAR_HANDLE = VarHandleKind("FinalField", + VALUE_TYPES, [ 'java.lang.invoke.MethodHandles', 'java.lang.invoke.VarHandle' @@ -171,6 +173,7 @@ FINAL_FIELD_VAR_HANDLE = VarHandleKind("FinalField", may_throw_read_only = False) STATIC_FIELD_VAR_HANDLE = VarHandleKind("StaticField", + VALUE_TYPES, [ 'java.lang.invoke.MethodHandles', 'java.lang.invoke.VarHandle' @@ -184,6 +187,7 @@ STATIC_FIELD_VAR_HANDLE = VarHandleKind("StaticField", may_throw_read_only = False) STATIC_FINAL_FIELD_VAR_HANDLE = VarHandleKind("StaticFinalField", + VALUE_TYPES, [ 'java.lang.invoke.MethodHandles', 'java.lang.invoke.VarHandle' @@ -197,6 +201,7 @@ STATIC_FINAL_FIELD_VAR_HANDLE = VarHandleKind("StaticFinalField", may_throw_read_only = False) ARRAY_ELEMENT_VAR_HANDLE = VarHandleKind("ArrayElement", + VALUE_TYPES, [ 'java.lang.invoke.MethodHandles', 'java.lang.invoke.VarHandle' @@ -212,13 +217,14 @@ ARRAY_ELEMENT_VAR_HANDLE = VarHandleKind("ArrayElement", may_throw_read_only = False) BYTE_ARRAY_LE_VIEW_VAR_HANDLE = VarHandleKind("ByteArrayViewLE", + VIEW_SUPPORTED_TYPES, [ 'java.lang.invoke.MethodHandles', 'java.lang.invoke.VarHandle', 'java.nio.ByteOrder' ], [ - "byte[] array = new byte[27]", + "byte[] array = VarHandleUnitTestHelpers.createFilledByteArray(27)", "int index = 8", "{" " index = VarHandleUnitTestHelpers.alignedOffset_${var_type}(array, index);" @@ -233,14 +239,38 @@ BYTE_ARRAY_LE_VIEW_VAR_HANDLE = VarHandleKind("ByteArrayViewLE", 'VarHandleUnitTestHelpers.getBytesAs_${var_type}(array, index, ByteOrder.LITTLE_ENDIAN)', may_throw_read_only = False) +NARROW_BYTE_ARRAY_LE_VIEW_VAR_HANDLE = VarHandleKind("NarrowByteArrayViewLE", + VIEW_SUPPORTED_NARROW_TYPES, + [ + 'java.lang.invoke.MethodHandles', + 'java.lang.invoke.VarHandle', + 'java.nio.ByteOrder' + ], + [ + "byte[] array = VarHandleUnitTestHelpers.createFilledByteArray(27)", + "int index = 10", + "{" + " index = VarHandleUnitTestHelpers.alignedOffset_${var_type}(array, index);" + " VarHandleUnitTestHelpers.setBytesAs_${var_type}(array, index, ${initial_value}, ByteOrder.LITTLE_ENDIAN);" + "}" + ], + 'MethodHandles.byteArrayViewVarHandle(${var_type}[].class, ByteOrder.LITTLE_ENDIAN)', + [ + 'array', + 'index' + ], + 'VarHandleUnitTestHelpers.getBytesAs_${var_type}(array, index, ByteOrder.LITTLE_ENDIAN)', + may_throw_read_only = False) + BYTE_ARRAY_BE_VIEW_VAR_HANDLE = VarHandleKind("ByteArrayViewBE", + VIEW_SUPPORTED_TYPES, [ 'java.lang.invoke.MethodHandles', 'java.lang.invoke.VarHandle', 'java.nio.ByteOrder' ], [ - "byte[] array = new byte[27]", + "byte[] array = VarHandleUnitTestHelpers.createFilledByteArray(27)", "int index = 8", "{" " index = VarHandleUnitTestHelpers.alignedOffset_${var_type}(array, index);" @@ -255,7 +285,31 @@ BYTE_ARRAY_BE_VIEW_VAR_HANDLE = VarHandleKind("ByteArrayViewBE", 'VarHandleUnitTestHelpers.getBytesAs_${var_type}(array, index, ByteOrder.BIG_ENDIAN)', may_throw_read_only = False) +NARROW_BYTE_ARRAY_BE_VIEW_VAR_HANDLE = VarHandleKind("NarrowByteArrayViewBE", + VIEW_SUPPORTED_NARROW_TYPES, + [ + 'java.lang.invoke.MethodHandles', + 'java.lang.invoke.VarHandle', + 'java.nio.ByteOrder' + ], + [ + "byte[] array = VarHandleUnitTestHelpers.createFilledByteArray(27)", + "int index = 10", + "{" + " index = VarHandleUnitTestHelpers.alignedOffset_${var_type}(array, index);" + " VarHandleUnitTestHelpers.setBytesAs_${var_type}(array, index, ${initial_value}, ByteOrder.BIG_ENDIAN);" + "}" + ], + 'MethodHandles.byteArrayViewVarHandle(${var_type}[].class, ByteOrder.BIG_ENDIAN)', + [ + 'array', + 'index' + ], + 'VarHandleUnitTestHelpers.getBytesAs_${var_type}(array, index, ByteOrder.BIG_ENDIAN)', + may_throw_read_only = False) + DIRECT_BYTE_BUFFER_LE_VIEW_VAR_HANDLE = VarHandleKind("DirectByteBufferViewLE", + VIEW_SUPPORTED_TYPES, [ 'java.lang.invoke.MethodHandles', 'java.lang.invoke.VarHandle', @@ -278,7 +332,32 @@ DIRECT_BYTE_BUFFER_LE_VIEW_VAR_HANDLE = VarHandleKind("DirectByteBufferViewLE", 'VarHandleUnitTestHelpers.getBytesAs_${var_type}(bb, index, ByteOrder.LITTLE_ENDIAN)', may_throw_read_only = False) +NARROW_DIRECT_BYTE_BUFFER_LE_VIEW_VAR_HANDLE = VarHandleKind("NarrowDirectByteBufferViewLE", + VIEW_SUPPORTED_NARROW_TYPES, + [ + 'java.lang.invoke.MethodHandles', + 'java.lang.invoke.VarHandle', + 'java.nio.ByteBuffer', + 'java.nio.ByteOrder' + ], + [ + "ByteBuffer bb = ByteBuffer.allocateDirect(31)", + "int index = 10", + "{" + " index = VarHandleUnitTestHelpers.alignedOffset_${var_type}(bb, index);" + " VarHandleUnitTestHelpers.setBytesAs_${var_type}(bb, index, ${initial_value}, ByteOrder.LITTLE_ENDIAN);" + "}" + ], + 'MethodHandles.byteBufferViewVarHandle(${var_type}[].class, ByteOrder.LITTLE_ENDIAN)', + [ + 'bb', + 'index' + ], + 'VarHandleUnitTestHelpers.getBytesAs_${var_type}(bb, index, ByteOrder.LITTLE_ENDIAN)', + may_throw_read_only = False) + DIRECT_BYTE_BUFFER_BE_VIEW_VAR_HANDLE = VarHandleKind("DirectByteBufferViewBE", + VIEW_SUPPORTED_TYPES, [ 'java.lang.invoke.MethodHandles', 'java.lang.invoke.VarHandle', @@ -301,7 +380,32 @@ DIRECT_BYTE_BUFFER_BE_VIEW_VAR_HANDLE = VarHandleKind("DirectByteBufferViewBE", 'VarHandleUnitTestHelpers.getBytesAs_${var_type}(bb, index, ByteOrder.BIG_ENDIAN)', may_throw_read_only = False) +NARROW_DIRECT_BYTE_BUFFER_BE_VIEW_VAR_HANDLE = VarHandleKind("NarrowDirectByteBufferViewBE", + VIEW_SUPPORTED_NARROW_TYPES, + [ + 'java.lang.invoke.MethodHandles', + 'java.lang.invoke.VarHandle', + 'java.nio.ByteBuffer', + 'java.nio.ByteOrder' + ], + [ + "ByteBuffer bb = ByteBuffer.allocateDirect(31)", + "int index = 10", + "{" + " index = VarHandleUnitTestHelpers.alignedOffset_${var_type}(bb, index);" + " VarHandleUnitTestHelpers.setBytesAs_${var_type}(bb, index, ${initial_value}, ByteOrder.BIG_ENDIAN);" + "}" + ], + 'MethodHandles.byteBufferViewVarHandle(${var_type}[].class, ByteOrder.BIG_ENDIAN)', + [ + 'bb', + 'index' + ], + 'VarHandleUnitTestHelpers.getBytesAs_${var_type}(bb, index, ByteOrder.BIG_ENDIAN)', + may_throw_read_only = False) + HEAP_BYTE_BUFFER_LE_VIEW_VAR_HANDLE = VarHandleKind("HeapByteBufferViewLE", + VIEW_SUPPORTED_TYPES, [ 'java.lang.invoke.MethodHandles', 'java.lang.invoke.VarHandle', @@ -309,7 +413,7 @@ HEAP_BYTE_BUFFER_LE_VIEW_VAR_HANDLE = VarHandleKind("HeapByteBufferViewLE", 'java.nio.ByteOrder' ], [ - "byte[] array = new byte[36]", + "byte[] array = VarHandleUnitTestHelpers.createFilledByteArray(36)", "int offset = 8", "ByteBuffer bb = ByteBuffer.wrap(array, offset, array.length - offset)", "int index = 8", @@ -326,7 +430,34 @@ HEAP_BYTE_BUFFER_LE_VIEW_VAR_HANDLE = VarHandleKind("HeapByteBufferViewLE", 'VarHandleUnitTestHelpers.getBytesAs_${var_type}(bb, index, ByteOrder.LITTLE_ENDIAN)', may_throw_read_only = False) +NARROW_HEAP_BYTE_BUFFER_LE_VIEW_VAR_HANDLE = VarHandleKind("NarrowHeapByteBufferViewLE", + VIEW_SUPPORTED_NARROW_TYPES, + [ + 'java.lang.invoke.MethodHandles', + 'java.lang.invoke.VarHandle', + 'java.nio.ByteBuffer', + 'java.nio.ByteOrder' + ], + [ + "byte[] array = VarHandleUnitTestHelpers.createFilledByteArray(36)", + "int offset = 8", + "ByteBuffer bb = ByteBuffer.wrap(array, offset, array.length - offset)", + "int index = 10", + "{" + " index = VarHandleUnitTestHelpers.alignedOffset_${var_type}(bb, index);" + " VarHandleUnitTestHelpers.setBytesAs_${var_type}(bb, index, ${initial_value}, ByteOrder.LITTLE_ENDIAN);" + "}" + ], + 'MethodHandles.byteBufferViewVarHandle(${var_type}[].class, ByteOrder.LITTLE_ENDIAN)', + [ + 'bb', + 'index' + ], + 'VarHandleUnitTestHelpers.getBytesAs_${var_type}(bb, index, ByteOrder.LITTLE_ENDIAN)', + may_throw_read_only = False) + HEAP_BYTE_BUFFER_BE_VIEW_VAR_HANDLE = VarHandleKind("HeapByteBufferViewBE", + VIEW_SUPPORTED_TYPES, [ 'java.lang.invoke.MethodHandles', 'java.lang.invoke.VarHandle', @@ -334,7 +465,7 @@ HEAP_BYTE_BUFFER_BE_VIEW_VAR_HANDLE = VarHandleKind("HeapByteBufferViewBE", 'java.nio.ByteOrder' ], [ - "byte[] array = new byte[47]", + "byte[] array = VarHandleUnitTestHelpers.createFilledByteArray(47)", "int offset = 8", "ByteBuffer bb = ByteBuffer.wrap(array, offset, array.length - offset)", "int index = 8", @@ -351,7 +482,34 @@ HEAP_BYTE_BUFFER_BE_VIEW_VAR_HANDLE = VarHandleKind("HeapByteBufferViewBE", 'VarHandleUnitTestHelpers.getBytesAs_${var_type}(bb, index, ByteOrder.BIG_ENDIAN)', may_throw_read_only = False) +NARROW_HEAP_BYTE_BUFFER_BE_VIEW_VAR_HANDLE = VarHandleKind("NarrowHeapByteBufferViewBE", + VIEW_SUPPORTED_NARROW_TYPES, + [ + 'java.lang.invoke.MethodHandles', + 'java.lang.invoke.VarHandle', + 'java.nio.ByteBuffer', + 'java.nio.ByteOrder' + ], + [ + "byte[] array = VarHandleUnitTestHelpers.createFilledByteArray(47)", + "int offset = 8", + "ByteBuffer bb = ByteBuffer.wrap(array, offset, array.length - offset)", + "int index = 10", + "{" + " index = VarHandleUnitTestHelpers.alignedOffset_${var_type}(bb, index);" + " VarHandleUnitTestHelpers.setBytesAs_${var_type}(bb, index, ${initial_value}, ByteOrder.BIG_ENDIAN);" + "}" + ], + 'MethodHandles.byteBufferViewVarHandle(${var_type}[].class, ByteOrder.BIG_ENDIAN)', + [ + 'bb', + 'index' + ], + 'VarHandleUnitTestHelpers.getBytesAs_${var_type}(bb, index, ByteOrder.BIG_ENDIAN)', + may_throw_read_only = False) + HEAP_BYTE_BUFFER_RO_LE_VIEW_VAR_HANDLE = VarHandleKind("HeapByteBufferReadOnlyViewLE", + VIEW_SUPPORTED_TYPES, [ 'java.lang.invoke.MethodHandles', 'java.lang.invoke.VarHandle', @@ -360,7 +518,7 @@ HEAP_BYTE_BUFFER_RO_LE_VIEW_VAR_HANDLE = VarHandleKind("HeapByteBufferReadOnlyVi 'java.nio.ReadOnlyBufferException' ], [ - "byte[] array = new byte[43]", + "byte[] array = VarHandleUnitTestHelpers.createFilledByteArray(43)", "int index = 8", "ByteBuffer bb", "{" @@ -368,7 +526,6 @@ HEAP_BYTE_BUFFER_RO_LE_VIEW_VAR_HANDLE = VarHandleKind("HeapByteBufferReadOnlyVi " index = VarHandleUnitTestHelpers.alignedOffset_${var_type}(bb, index);" " VarHandleUnitTestHelpers.setBytesAs_${var_type}(array, index, ${initial_value}, ByteOrder.LITTLE_ENDIAN);" " bb = bb.asReadOnlyBuffer();" - "}" ], 'MethodHandles.byteBufferViewVarHandle(${var_type}[].class, ByteOrder.LITTLE_ENDIAN)', @@ -379,7 +536,36 @@ HEAP_BYTE_BUFFER_RO_LE_VIEW_VAR_HANDLE = VarHandleKind("HeapByteBufferReadOnlyVi 'VarHandleUnitTestHelpers.getBytesAs_${var_type}(bb, index, ByteOrder.LITTLE_ENDIAN)', may_throw_read_only = True) +NARROW_HEAP_BYTE_BUFFER_RO_LE_VIEW_VAR_HANDLE = VarHandleKind("NarrowHeapByteBufferReadOnlyViewLE", + VIEW_SUPPORTED_NARROW_TYPES, + [ + 'java.lang.invoke.MethodHandles', + 'java.lang.invoke.VarHandle', + 'java.nio.ByteBuffer', + 'java.nio.ByteOrder', + 'java.nio.ReadOnlyBufferException' + ], + [ + "byte[] array = VarHandleUnitTestHelpers.createFilledByteArray(43)", + "int index = 10", + "ByteBuffer bb", + "{" + " bb = ByteBuffer.wrap(array).asReadOnlyBuffer();" + " index = VarHandleUnitTestHelpers.alignedOffset_${var_type}(bb, index);" + " VarHandleUnitTestHelpers.setBytesAs_${var_type}(array, index, ${initial_value}, ByteOrder.LITTLE_ENDIAN);" + " bb = bb.asReadOnlyBuffer();" + "}" + ], + 'MethodHandles.byteBufferViewVarHandle(${var_type}[].class, ByteOrder.LITTLE_ENDIAN)', + [ + 'bb', + 'index' + ], + 'VarHandleUnitTestHelpers.getBytesAs_${var_type}(bb, index, ByteOrder.LITTLE_ENDIAN)', + may_throw_read_only = True) + HEAP_BYTE_BUFFER_RO_BE_VIEW_VAR_HANDLE = VarHandleKind("HeapByteBufferReadOnlyViewBE", + VIEW_SUPPORTED_TYPES, [ 'java.lang.invoke.MethodHandles', 'java.lang.invoke.VarHandle', @@ -388,12 +574,12 @@ HEAP_BYTE_BUFFER_RO_BE_VIEW_VAR_HANDLE = VarHandleKind("HeapByteBufferReadOnlyVi 'java.nio.ReadOnlyBufferException' ], [ - "byte[] array = new byte[29]", - "int index", + "byte[] array = VarHandleUnitTestHelpers.createFilledByteArray(29)", + "int index = 8", "ByteBuffer bb", "{" " bb = ByteBuffer.wrap(array);" - " index = VarHandleUnitTestHelpers.alignedOffset_${var_type}(bb, 8);" + " index = VarHandleUnitTestHelpers.alignedOffset_${var_type}(bb, index);" " VarHandleUnitTestHelpers.setBytesAs_${var_type}(array, index, ${initial_value}, ByteOrder.BIG_ENDIAN);" " bb = bb.asReadOnlyBuffer();" "}" @@ -406,6 +592,34 @@ HEAP_BYTE_BUFFER_RO_BE_VIEW_VAR_HANDLE = VarHandleKind("HeapByteBufferReadOnlyVi 'VarHandleUnitTestHelpers.getBytesAs_${var_type}(bb, index, ByteOrder.BIG_ENDIAN)', may_throw_read_only = True) +NARROW_HEAP_BYTE_BUFFER_RO_BE_VIEW_VAR_HANDLE = VarHandleKind("NarrowHeapByteBufferReadOnlyViewBE", + VIEW_SUPPORTED_NARROW_TYPES, + [ + 'java.lang.invoke.MethodHandles', + 'java.lang.invoke.VarHandle', + 'java.nio.ByteBuffer', + 'java.nio.ByteOrder', + 'java.nio.ReadOnlyBufferException' + ], + [ + "byte[] array = VarHandleUnitTestHelpers.createFilledByteArray(29)", + "int index = 10", + "ByteBuffer bb", + "{" + " bb = ByteBuffer.wrap(array);" + " index = VarHandleUnitTestHelpers.alignedOffset_${var_type}(bb, index);" + " VarHandleUnitTestHelpers.setBytesAs_${var_type}(array, index, ${initial_value}, ByteOrder.BIG_ENDIAN);" + " bb = bb.asReadOnlyBuffer();" + "}" + ], + 'MethodHandles.byteBufferViewVarHandle(${var_type}[].class, ByteOrder.BIG_ENDIAN)', + [ + 'bb', + 'index' + ], + 'VarHandleUnitTestHelpers.getBytesAs_${var_type}(bb, index, ByteOrder.BIG_ENDIAN)', + may_throw_read_only = True) + ALL_FIELD_VAR_HANDLE_KINDS = [ FIELD_VAR_HANDLE, FINAL_FIELD_VAR_HANDLE, @@ -415,13 +629,21 @@ ALL_FIELD_VAR_HANDLE_KINDS = [ ALL_BYTE_VIEW_VAR_HANDLE_KINDS = [ BYTE_ARRAY_LE_VIEW_VAR_HANDLE, + NARROW_BYTE_ARRAY_LE_VIEW_VAR_HANDLE, BYTE_ARRAY_BE_VIEW_VAR_HANDLE, + NARROW_BYTE_ARRAY_BE_VIEW_VAR_HANDLE, DIRECT_BYTE_BUFFER_LE_VIEW_VAR_HANDLE, + NARROW_DIRECT_BYTE_BUFFER_LE_VIEW_VAR_HANDLE, DIRECT_BYTE_BUFFER_BE_VIEW_VAR_HANDLE, + NARROW_DIRECT_BYTE_BUFFER_BE_VIEW_VAR_HANDLE, HEAP_BYTE_BUFFER_LE_VIEW_VAR_HANDLE, + NARROW_HEAP_BYTE_BUFFER_LE_VIEW_VAR_HANDLE, HEAP_BYTE_BUFFER_BE_VIEW_VAR_HANDLE, + NARROW_HEAP_BYTE_BUFFER_BE_VIEW_VAR_HANDLE, HEAP_BYTE_BUFFER_RO_LE_VIEW_VAR_HANDLE, - HEAP_BYTE_BUFFER_RO_BE_VIEW_VAR_HANDLE + NARROW_HEAP_BYTE_BUFFER_RO_LE_VIEW_VAR_HANDLE, + HEAP_BYTE_BUFFER_RO_BE_VIEW_VAR_HANDLE, + NARROW_HEAP_BYTE_BUFFER_RO_BE_VIEW_VAR_HANDLE ] ALL_VAR_HANDLE_KINDS = ALL_FIELD_VAR_HANDLE_KINDS + [ ARRAY_ELEMENT_VAR_HANDLE ] + ALL_BYTE_VIEW_VAR_HANDLE_KINDS |