LINUX.ORG.RU

llvm и SMID


0

1

Добрый вечер, подскажите пожалуйста, кто работал с этой штукой, можно ли мне использовать SSE1-SSE4, MMX в этом ассемблере, если да, то как? просто не нашел как можно в регистр XMM можно что-то записывать...

★★★
Ответ на: комментарий от anonymous

ну всмысле, llvm это что-то вроде ассемблера :)

Int64 ★★★
() автор топика

он не предназначен чтоб на нëм писали руками. Впрочем, как и ассемблер. Брось каку!

anonymous
()

llvm - не ассемблер, а намного более высокоуровневая штука. SSE1-SSE4 он при желании использует сам. Ну и есть возможность делать в него ассемблерные вставки с твоим SSE1-4.

Deleted
()
Ответ на: комментарий от Deleted

а если мне операция над матрицами нужна будет? И может мне больше по душе самому контролировать этот процесс, может мне хочется генерировать, более оптимальный код. Ну и как на счет AVX? Вообщем вопрос, как использовать ассемблер на LLVM?

Int64 ★★★
() автор топика
Ответ на: комментарий от Int64

IR LLVM != ассемблер. clang, скорее всего, может собрать сишный код, содержащий asm-вставки

fads ★★
()
Ответ на: комментарий от Int64

Вообщем вопрос, как использовать ассемблер на LLVM?

RTFM, не?

yyk ★★★★★
()

1. http://llvm.org/docs/LangRef.html#t_vector

все операции над векторными типами будут генерировать соответствующие SIMD-команды.

если этого не хватит, то

2. x86 intrinsics: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IntrinsicsX86.td?...

(в целом, на стороне llvm они выглядят примерно как llvm.x86.sse41.pmaxsd для pmaxsd, введенного в sse 4.1)

нормальной документации по ним, по-моему, нет.

anonymous
()
Ответ на: комментарий от Int64

Возвращаясь непосредственно к вопросу:

Допустим, мы хотим сложить два упакованных дабла (то есть сделать addpd).

Без интринсиков это можно записать примерно так:

%res = fadd <2 x double> %x, %y

Что-то я интринсика для addpd не нашел (странно), но по идее с ним должно писаться так же:

%res = llvm.x86.sse2.addpd <2 x double> %x, %y

anonymous
()
Ответ на: комментарий от anonymous

понятно, ну а вот я скачал intrinsicsX86.td, куда теперь мне его запихать? просто такое интересное расширение td :) ну наверное переименовать в h нужно, а потом в какую папку в include в llvm-C или просто в llvm

Int64 ★★★
() автор топика
Ответ на: комментарий от Int64

Ну слинкуй его с модулем, написанным на ассемблере. А операции с матрицами, на которых SSE дал бы профит, можно реализовать через векторные операции, где будет задействована оптимизация.

Deleted
()
Ответ на: комментарий от Deleted

я пока что ничего не скомпилировал, просто интересуюсь на будущее, есть ли возможность по своему реализовать ту или иную функцию. Просто видел несколько реализаций по SSE и методы как их оптимизировать можно.

Int64 ★★★
() автор топика
Ответ на: комментарий от Int64

Никуда, я его для справки привел.

Все эти интринсики (на то они и интринсики) и так уже в llvm — то есть ты просто должен их (llvm.x86.*) как если бы они были функциями (но самому тебе их нигде определять не нужно).

anonymous
()
Ответ на: комментарий от anonymous

ты просто должен их (llvm.x86.*) как если бы они были функциями

...должен их использовать, конечно

anonymous
()
Ответ на: комментарий от anonymous

ясно, спасибо большое, буду разбираться.

Int64 ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.