Я знаю, что 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.