689 Copy::conjoint_memory_atomic(src, dst, sz);
690 UNSAFE_END
691
692
693 ////// Random queries
694
695 // See comment at file start about UNSAFE_LEAF
696 //UNSAFE_LEAF(jint, Unsafe_AddressSize())
697 UNSAFE_ENTRY(jint, Unsafe_AddressSize(JNIEnv *env, jobject unsafe))
698 UnsafeWrapper("Unsafe_AddressSize");
699 return sizeof(void*);
700 UNSAFE_END
701
702 // See comment at file start about UNSAFE_LEAF
703 //UNSAFE_LEAF(jint, Unsafe_PageSize())
704 UNSAFE_ENTRY(jint, Unsafe_PageSize(JNIEnv *env, jobject unsafe))
705 UnsafeWrapper("Unsafe_PageSize");
706 return os::vm_page_size();
707 UNSAFE_END
708
709 jint find_field_offset(jobject field, int must_be_static, TRAPS) {
710 if (field == NULL) {
711 THROW_0(vmSymbols::java_lang_NullPointerException());
712 }
713
714 oop reflected = JNIHandles::resolve_non_null(field);
715 oop mirror = java_lang_reflect_Field::clazz(reflected);
716 Klass* k = java_lang_Class::as_Klass(mirror);
717 int slot = java_lang_reflect_Field::slot(reflected);
718 int modifiers = java_lang_reflect_Field::modifiers(reflected);
719
720 if (must_be_static >= 0) {
721 int really_is_static = ((modifiers & JVM_ACC_STATIC) != 0);
722 if (must_be_static != really_is_static) {
723 THROW_0(vmSymbols::java_lang_IllegalArgumentException());
724 }
725 }
726
727 int offset = InstanceKlass::cast(k)->field_offset(slot);
728 return field_offset_from_byte_offset(offset);
1592 {CC"staticFieldBase", CC"("FLD")"OBJ, FN_PTR(Unsafe_StaticFieldBaseFromField)},
1593 {CC"ensureClassInitialized",CC"("CLS")V", FN_PTR(Unsafe_EnsureClassInitialized)},
1594 {CC"arrayBaseOffset", CC"("CLS")I", FN_PTR(Unsafe_ArrayBaseOffset)},
1595 {CC"arrayIndexScale", CC"("CLS")I", FN_PTR(Unsafe_ArrayIndexScale)},
1596 {CC"addressSize", CC"()I", FN_PTR(Unsafe_AddressSize)},
1597 {CC"pageSize", CC"()I", FN_PTR(Unsafe_PageSize)},
1598
1599 {CC"defineClass", CC"("DC_Args")"CLS, FN_PTR(Unsafe_DefineClass)},
1600 {CC"allocateInstance", CC"("CLS")"OBJ, FN_PTR(Unsafe_AllocateInstance)},
1601 {CC"monitorEnter", CC"("OBJ")V", FN_PTR(Unsafe_MonitorEnter)},
1602 {CC"monitorExit", CC"("OBJ")V", FN_PTR(Unsafe_MonitorExit)},
1603 {CC"tryMonitorEnter", CC"("OBJ")Z", FN_PTR(Unsafe_TryMonitorEnter)},
1604 {CC"throwException", CC"("THR")V", FN_PTR(Unsafe_ThrowException)},
1605 {CC"compareAndSwapObject", CC"("OBJ"J"OBJ""OBJ")Z", FN_PTR(Unsafe_CompareAndSwapObject)},
1606 {CC"compareAndSwapInt", CC"("OBJ"J""I""I"")Z", FN_PTR(Unsafe_CompareAndSwapInt)},
1607 {CC"compareAndSwapLong", CC"("OBJ"J""J""J"")Z", FN_PTR(Unsafe_CompareAndSwapLong)},
1608 {CC"putOrderedObject", CC"("OBJ"J"OBJ")V", FN_PTR(Unsafe_SetOrderedObject)},
1609 {CC"putOrderedInt", CC"("OBJ"JI)V", FN_PTR(Unsafe_SetOrderedInt)},
1610 {CC"putOrderedLong", CC"("OBJ"JJ)V", FN_PTR(Unsafe_SetOrderedLong)},
1611 {CC"park", CC"(ZJ)V", FN_PTR(Unsafe_Park)},
1612 {CC"unpark", CC"("OBJ")V", FN_PTR(Unsafe_Unpark)}
1613 };
1614
1615 JNINativeMethod loadavg_method[] = {
1616 {CC"getLoadAverage", CC"([DI)I", FN_PTR(Unsafe_Loadavg)}
1617 };
1618
1619 JNINativeMethod prefetch_methods[] = {
1620 {CC"prefetchRead", CC"("OBJ"J)V", FN_PTR(Unsafe_PrefetchRead)},
1621 {CC"prefetchWrite", CC"("OBJ"J)V", FN_PTR(Unsafe_PrefetchWrite)},
1622 {CC"prefetchReadStatic", CC"("OBJ"J)V", FN_PTR(Unsafe_PrefetchRead)},
1623 {CC"prefetchWriteStatic",CC"("OBJ"J)V", FN_PTR(Unsafe_PrefetchWrite)}
1624 };
1625
1626 JNINativeMethod memcopy_methods_17[] = {
1627 {CC"copyMemory", CC"("OBJ"J"OBJ"JJ)V", FN_PTR(Unsafe_CopyMemory2)},
1628 {CC"setMemory", CC"("OBJ"JJB)V", FN_PTR(Unsafe_SetMemory2)}
1629 };
1630
1631 JNINativeMethod memcopy_methods_15[] = {
1632 {CC"setMemory", CC"("ADR"JB)V", FN_PTR(Unsafe_SetMemory)},
|
689 Copy::conjoint_memory_atomic(src, dst, sz);
690 UNSAFE_END
691
692
693 ////// Random queries
694
695 // See comment at file start about UNSAFE_LEAF
696 //UNSAFE_LEAF(jint, Unsafe_AddressSize())
697 UNSAFE_ENTRY(jint, Unsafe_AddressSize(JNIEnv *env, jobject unsafe))
698 UnsafeWrapper("Unsafe_AddressSize");
699 return sizeof(void*);
700 UNSAFE_END
701
702 // See comment at file start about UNSAFE_LEAF
703 //UNSAFE_LEAF(jint, Unsafe_PageSize())
704 UNSAFE_ENTRY(jint, Unsafe_PageSize(JNIEnv *env, jobject unsafe))
705 UnsafeWrapper("Unsafe_PageSize");
706 return os::vm_page_size();
707 UNSAFE_END
708
709 UNSAFE_ENTRY(jboolean, Unsafe_ClmulAvailable(JNIEnv *env, jobject unsafe))
710 UnsafeWrapper("Unsafe_ClmulAvailable");
711 return UseAVX && UseCLMUL;
712 UNSAFE_END
713
714 jint find_field_offset(jobject field, int must_be_static, TRAPS) {
715 if (field == NULL) {
716 THROW_0(vmSymbols::java_lang_NullPointerException());
717 }
718
719 oop reflected = JNIHandles::resolve_non_null(field);
720 oop mirror = java_lang_reflect_Field::clazz(reflected);
721 Klass* k = java_lang_Class::as_Klass(mirror);
722 int slot = java_lang_reflect_Field::slot(reflected);
723 int modifiers = java_lang_reflect_Field::modifiers(reflected);
724
725 if (must_be_static >= 0) {
726 int really_is_static = ((modifiers & JVM_ACC_STATIC) != 0);
727 if (must_be_static != really_is_static) {
728 THROW_0(vmSymbols::java_lang_IllegalArgumentException());
729 }
730 }
731
732 int offset = InstanceKlass::cast(k)->field_offset(slot);
733 return field_offset_from_byte_offset(offset);
1597 {CC"staticFieldBase", CC"("FLD")"OBJ, FN_PTR(Unsafe_StaticFieldBaseFromField)},
1598 {CC"ensureClassInitialized",CC"("CLS")V", FN_PTR(Unsafe_EnsureClassInitialized)},
1599 {CC"arrayBaseOffset", CC"("CLS")I", FN_PTR(Unsafe_ArrayBaseOffset)},
1600 {CC"arrayIndexScale", CC"("CLS")I", FN_PTR(Unsafe_ArrayIndexScale)},
1601 {CC"addressSize", CC"()I", FN_PTR(Unsafe_AddressSize)},
1602 {CC"pageSize", CC"()I", FN_PTR(Unsafe_PageSize)},
1603
1604 {CC"defineClass", CC"("DC_Args")"CLS, FN_PTR(Unsafe_DefineClass)},
1605 {CC"allocateInstance", CC"("CLS")"OBJ, FN_PTR(Unsafe_AllocateInstance)},
1606 {CC"monitorEnter", CC"("OBJ")V", FN_PTR(Unsafe_MonitorEnter)},
1607 {CC"monitorExit", CC"("OBJ")V", FN_PTR(Unsafe_MonitorExit)},
1608 {CC"tryMonitorEnter", CC"("OBJ")Z", FN_PTR(Unsafe_TryMonitorEnter)},
1609 {CC"throwException", CC"("THR")V", FN_PTR(Unsafe_ThrowException)},
1610 {CC"compareAndSwapObject", CC"("OBJ"J"OBJ""OBJ")Z", FN_PTR(Unsafe_CompareAndSwapObject)},
1611 {CC"compareAndSwapInt", CC"("OBJ"J""I""I"")Z", FN_PTR(Unsafe_CompareAndSwapInt)},
1612 {CC"compareAndSwapLong", CC"("OBJ"J""J""J"")Z", FN_PTR(Unsafe_CompareAndSwapLong)},
1613 {CC"putOrderedObject", CC"("OBJ"J"OBJ")V", FN_PTR(Unsafe_SetOrderedObject)},
1614 {CC"putOrderedInt", CC"("OBJ"JI)V", FN_PTR(Unsafe_SetOrderedInt)},
1615 {CC"putOrderedLong", CC"("OBJ"JJ)V", FN_PTR(Unsafe_SetOrderedLong)},
1616 {CC"park", CC"(ZJ)V", FN_PTR(Unsafe_Park)},
1617 {CC"unpark", CC"("OBJ")V", FN_PTR(Unsafe_Unpark)},
1618 {CC"clmulAvailable", CC"()Z", FN_PTR(Unsafe_ClmulAvailable)},
1619
1620 };
1621
1622 JNINativeMethod loadavg_method[] = {
1623 {CC"getLoadAverage", CC"([DI)I", FN_PTR(Unsafe_Loadavg)}
1624 };
1625
1626 JNINativeMethod prefetch_methods[] = {
1627 {CC"prefetchRead", CC"("OBJ"J)V", FN_PTR(Unsafe_PrefetchRead)},
1628 {CC"prefetchWrite", CC"("OBJ"J)V", FN_PTR(Unsafe_PrefetchWrite)},
1629 {CC"prefetchReadStatic", CC"("OBJ"J)V", FN_PTR(Unsafe_PrefetchRead)},
1630 {CC"prefetchWriteStatic",CC"("OBJ"J)V", FN_PTR(Unsafe_PrefetchWrite)}
1631 };
1632
1633 JNINativeMethod memcopy_methods_17[] = {
1634 {CC"copyMemory", CC"("OBJ"J"OBJ"JJ)V", FN_PTR(Unsafe_CopyMemory2)},
1635 {CC"setMemory", CC"("OBJ"JJB)V", FN_PTR(Unsafe_SetMemory2)}
1636 };
1637
1638 JNINativeMethod memcopy_methods_15[] = {
1639 {CC"setMemory", CC"("ADR"JB)V", FN_PTR(Unsafe_SetMemory)},
|