Вставка кода/встраивание сборки в Java?

Я знаю, что Java — безопасный язык, но когда нужны матричные вычисления, могу ли я попробовать что-нибудь побыстрее?

Я изучаю __asm{} на C++, компилятор Digital -Mars и FASM. Я хочу сделать то же самое на Java. Как я могу встроить ассемблерные коды в функции? Это вообще возможно?

Что-то вроде этого (векторизованный цикл для привязки всех элементов массива к значению без ветвления, с использованием поддержки AVX ЦП):

JavaAsmBlock(
   # get pointers into registers somehow
   # and tell Java which registers the asm clobbers somehow
     vbroadcastss  twenty_five(%rip), %ymm0
     xor   %edx,%edx
.Lloop:                            # do {
    vmovups   (%rsi, %rdx, 4), %ymm1
    vcmpltps   %ymm1, %ymm0, %ymm2
    vblendvps  %ymm2, %ymm0, %ymm1, %ymm1  # TODO: use vminps instead
    vmovups    %ymm1, (%rdi, %rdx, 4)
    # TODO: unroll the loop a bit, and maybe handle unaligned output specially if that's common
    add         $32, %rdx
    cmp         %rcx, %rdx
    jb    .Lloop                  # } while(idx < count)
    vzeroupper
);

System.out.println(var[0]);

Я не хочу использовать инжектор с кодом -. Я хочу увидеть инструкции Intel или AT&T в стиле x86.

10
задан Peter Cordes 15 June 2018 в 05:09
поделиться