Skip to content

Conversation

@GlebSolovev
Copy link

@GlebSolovev GlebSolovev commented Nov 24, 2021

Ссылка на первую версию этого пулл реквеста, где мы обсудили, по-моему, все кроме graal-а: #18

Переношу этот рефакторинг кода: openjdk/jdk#154, ему как раз соответствует JDK 8253015.
Что и почему я при переносе изменил:

Вместе с основным бэкпортом рефакторинга кода переношу еще 3 коммита, исправляющих в нем ошибки:

int VM_Version::_zva_length;
int VM_Version::_dcache_line_size;
int VM_Version::_icache_line_size;
int VM_Version::_initial_sve_vector_length;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Это случайно попало, оно не нужно

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Спасибо, действительно, случайно! Я даже помню, как его убивал, чорт)

Copy link
Member

@AntonKozlov AntonKozlov left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Круто! Реально сложный бекпорт попался. Всё хорошо по большей части 👍

Comment on lines +27 to +28
#include "runtime/arguments.hpp"
#include "runtime/globals_extension.hpp"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Выглядит как лишние include


#include <asm/hwcap.h>
#include <sys/auxv.h>
#include <sys/prctl.h>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

И этот один инклюд кажется лишний

#include <sys/prctl.h>


boolean isDcZvaProhibited = true;
int zvaLength = 0;
if (GraalHotSpotVMConfig.JDK >= 16) { // TODO: fix GraalHotSpotVMConfig.JDK >= 16
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Тут получается надо добавить проверку на JDK_UPDATE из src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/GraalHotSpotVMConfigAccess.java

т.е. JDK >= 16 || (JDK >= 15 && JDK_UPDATE >= xxx

А xxx можно посмотреть в make/autoconf/version-numbers:

DEFAULT_VERSION_UPDATE=6

Надо бы убедиться, что значение действительно сюда проходит и используется как надо.

Насколько я вижу, использование грааля включается -XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompiler (https://openjdk.java.net/jeps/317), плюс -Xcomp триггерит компиляцию каждого встреченного java метода. И тогда можно добавить отладочную печать прямо сюда.

// * DZP, bit [4] of indicates whether use of DC ZVA instruction is prohibited.
public final int psrInfoDczidValue = getFieldValue("VM_Version::_psr_info.dczid_el0", Integer.class, "uint32_t", 0x10, (JVMCI ? jvmciGE(JVMCI_19_3_b04) : JDK >= 14) && osArch.equals("aarch64"));
public final int psrInfoDczidValue = getFieldValue("VM_Version::_psr_info.dczid_el0", Integer.class, "uint32_t", 0x10,
(JVMCI ? jvmciGE(JVMCI_19_3_b04) : (JDK == 14 || JDK == 15)) && osArch.equals("aarch64"));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

JDK == 15 должно теперь видимо превратиться в (JDK == 15 && JDK_UPDATE < xxx)

Comment on lines +66 to +75
static_assert(CPU_FP == HWCAP_FP, "Flag CPU_FP must follow Linux HWCAP");
static_assert(CPU_ASIMD == HWCAP_ASIMD, "Flag CPU_ASIMD must follow Linux HWCAP");
static_assert(CPU_EVTSTRM == HWCAP_EVTSTRM, "Flag CPU_EVTSTRM must follow Linux HWCAP");
static_assert(CPU_AES == HWCAP_AES, "Flag CPU_AES must follow Linux HWCAP");
static_assert(CPU_PMULL == HWCAP_PMULL, "Flag CPU_PMULL must follow Linux HWCAP");
static_assert(CPU_SHA1 == HWCAP_SHA1, "Flag CPU_SHA1 must follow Linux HWCAP");
static_assert(CPU_SHA2 == HWCAP_SHA2, "Flag CPU_SHA2 must follow Linux HWCAP");
static_assert(CPU_CRC32 == HWCAP_CRC32, "Flag CPU_CRC32 must follow Linux HWCAP");
static_assert(CPU_LSE == HWCAP_ATOMICS, "Flag CPU_LSE must follow Linux HWCAP");
static_assert(CPU_DCPOP == HWCAP_DCPOP, "Flag CPU_DCPOP must follow Linux HWCAP");
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А надо как-то запускать configure особо? у меня ругается на нашем кросс-компайлере

/home/anton/proj/jdk15u-dev/src/hotspot/os_cpu/linux_aarch64/vm_version_linux_aarch64.cpp:65:3: error: identifier 'static_assert' is a keyword in C++11 [-Werror=c++11-compat]

А в

#define STATIC_ASSERT(Cond) \
объявлен STATIC_ASSERT, который повсеместно используется в хостпоте. Кажется лучше использовать его.

@AntonKozlov
Copy link
Member

Конфликты в edee095 отмечены в стиле по умолчанию. Реально удобнее работать с diff3 стилем. Глеб, на будущее добавь пожалуйста конфигурацию в git:

https://github.com/azul-research/macos-aarch64/blob/master/README.md#%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0

(параграф добавил только что :))

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants