LINUX.ORG.RU

Релиз Yasm 1.0.0

 , , ,


1

0

Yasm - распространяемый под лицензией BSDL ассемблер для x86 и x86_64 платформ с поддержкой синтаксисов nasm и gas, частично tasm , форматов binary, ELF32, ELF64, 32/64-bit Mach-O, RDOFF2, COFF, Win32/64.

Несмотря на уже широкое использование yasm в различных opensource проектах, это первая не-бета версия, автором были достигнуты следующие цели:

  • Полная поддержка NASM-синтаксиса для основных целевых платформ
  • Поддержка синтаксиса GAS (GNU assembler / binutils)
  • source-level отладка с использованием DWARF2 или CodeView 8.0 (VS2005)
  • Поддержка TLS (Thread local storage) для ELF32/64 и SEH (structured exception handling) для Win32/64
  • Поддержка наборов инструкций новейших процессоров AMD XOP/FMA4/CVT16 (Bulldozer) и Intel AVX (Sandybridge)

страница проекта

>>> Подробности и загрузка

★★★★★

Проверено: maxcom ()

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

Sun-ch ()

это первая не-бета версия

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

AlexVR ★★★★★ ()
Ответ на: комментарий от Sun-ch

Я вообще не понимаю, какой мазохист пишет на асме, в наш век мегакомпиляторов на С.

gcc?

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

вот кучу ошибок автор (Петер Джексон , совсем как режиссер известный) к релизу и постарался исправить

Sylvia ★★★★★ ()
Ответ на: комментарий от Sun-ch

Какие например? Если человек пишет на ассемблере , то ему не нужны никакие оптимизации. Как он напишет - так и будет.
А многие виды оптимизаций в компиляторах сужествуют потому , что это они - компиляторы генерируют не оптимальный код.

anonymous ()

>1.0.0

поддержка NASM-синтаксиса

Поддержка синтаксиса GAS


Надеюсь, со всем этим оно кое-как стабильно. Стоит попробовать...

postrediori ()
Ответ на: комментарий от Sun-ch

>Я вообще не понимаю, какой мазохист пишет на асме
Полностью писать всё на ассемблере не очень приемлимо. Но иногда оптимизация и скорость намного важнее расширяемости и лёгкости сопровождения.

postrediori ()

ps: для тех кто считает что asm не нужен, напомню про кодеки и процедуры обработки графики, различные фильтры
mplayer например собирается частично yasm без вызова GCC

вот кусок сборки libx264:

yasm -O2 -f elf -DPIC -Icommon/x86/ -o common/x86/cabac-a.o common/x86/cabac-a.asm
yasm -O2 -f elf -DPIC -Icommon/x86/ -o common/x86/dct-a.o common/x86/dct-a.asm
yasm -O2 -f elf -DPIC -Icommon/x86/ -o common/x86/deblock-a.o common/x86/deblock-a.asm
yasm -O2 -f elf -DPIC -Icommon/x86/ -o common/x86/mc-a.o common/x86/mc-a.asm
yasm -O2 -f elf -DPIC -Icommon/x86/ -o common/x86/mc-a2.o common/x86/mc-a2.asm
yasm -O2 -f elf -DPIC -Icommon/x86/ -o common/x86/pixel-a.o common/x86/pixel-a.asm
yasm -O2 -f elf -DPIC -Icommon/x86/ -o common/x86/predict-a.o common/x86/predict-a.asm
yasm -O2 -f elf -DPIC -Icommon/x86/ -o common/x86/quant-a.o common/x86/quant-a.asm
yasm -O2 -f elf -DPIC -Icommon/x86/ -o common/x86/sad-a.o common/x86/sad-a.asm
yasm -O2 -f elf -DPIC -Icommon/x86/ -o common/x86/cpu-a.o common/x86/cpu-a.asm
yasm -O2 -f elf -DPIC -Icommon/x86/ -o common/x86/dct-32.o common/x86/dct-32.asm
yasm -O2 -f elf -DPIC -Icommon/x86/ -o common/x86/pixel-32.o common/x86/pixel-32.asm
gcc -shared -o libx264.so.83 ...

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

GAS - новая возможность
NASM - изначально полировали, yasm писался как замена nasm

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

Да за это время (9 лет) сменилось несколько поколений процессоров и компиляторов. Так что статья является устаревшей и исключительно вредной. Многие молодые люди до сих пор считают, что писать на асме - это признак мегакрутого системного программиста. Дядя не сможет глобально оптимизировать прогу объемом порядка 1 млн. строк на асме, а компилятор как нехрен делать. Локальные опимизации умножений и логарифмов вообще никого не интересуют.

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

>А многие виды оптимизаций в компиляторах сужествуют потому , что это они - компиляторы генерируют не оптимальный код.

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

Sun-ch ()
Ответ на: комментарий от Sun-ch

>Локальные опимизации умножений и логарифмов вообще никого не интересуют.
Если делать клиентские приложения/бд/игрушки, то да, это неактуально. Но вот когда нужно много серьёзной математики, то иногда ассемблер оправдан. (не нужен, например, весь логарифм, нужна только целая часть и т.п.)

postrediori ()
Ответ на: комментарий от Sun-ch

сменилось несколько поколений процессоров и компиляторов

Поэтому новые компиляторы все так же не умеют оптимизировать под новые процессоры.

http://lorquotes.ru/view-quote.php?id=1823

Про миллионы строк это понятно, речь шла о точечных ударах.

Локальные опимизации умножений и логарифмов вообще никого не интересуют

Кое-кого все же интересуют.

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

Для серьезной математики используют библиотеки, высокооптимизированные и самое главное - портабельные и очень хорошо оттестированные.

Sun-ch ()
Ответ на: комментарий от Sun-ch

Саныч, перед тем как говорить о бороздящих просторы вселенной кромпиляторах, что стоит почитать бенчмарки. Например: http://blog.lexa.ru/2007/01/27/umnozhenie_matric_serija_2_woodcrest_protiv_op...

А потом посмотри на исходники Goto BLAS --- и узрей там кучи АСМА под полдюжины архитектур: http://www.tacc.utexas.edu/resources/software/software-users/frontend-users/s... (требует рагистрации) Goto BLAS, к сожалению, не опенсурсный ни разу, Лёха что-то не то написал.

sv75 ★★★★★ ()
Ответ на: комментарий от Sun-ch

> спекулятивное исполнение кода

насколько я знаю, это дело процессора, а не компилятора

nnm ()
Ответ на: комментарий от Sun-ch

>Для серьезной математики используют библиотеки
А чтобы эти библиотеки собрать/портировать в системе уже должен быть ассемблер. И чтобы эти библиотеки разрабатывать тоже. Так что куча ассемблеров нужна не для того, чтобы «крутые» программисты считали себя крутыми.

postrediori ()
Ответ на: комментарий от Sun-ch

А на чем эти библиотеки написаны?

What is GMP?

The speed is achieved ... with highly optimised assembly code for the most common inner loops for a lot of CPUs

unsigned ★★★ ()
Ответ на: комментарий от Sun-ch

>Нормальный человек такого сделать не может, в силу очевидных причин.

Если человек такого сделать не может, то и компилятор тоже ввиду того что компилятор написан людьми.

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

Так компиляторы пишут «ненормальные» люди, отлично разбирающиеся в оптимизации.

nnm ()
Ответ на: комментарий от Sun-ch

Хватит растекаться мыслю по древу!

Давай конкретные примеры по видам оптимизации, которые человек не способен применять.

AF ★★★ ()
Ответ на: Хватит растекаться мыслю по древу! от AF

> которые человек не способен применять.

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

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

И всё таки программы с GAS ассемблером не очень хорошо компилируются. А там ещё и TASM появился. Так что будем ждать и высылать отчеты об ошибках...

postrediori ()
Ответ на: комментарий от Sun-ch

Оптимизируют обычно те части кода, которые занимают по объему <1%, но их влияние на производительность гораздо больше этой %%-доли. Вот к примеру - SIMD-оптипизации современные компиляторы в большинстве случаев выполняют хуже человека, если вообще выполняют

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

Если делать клиентские приложения/бд/игрушки, то да, это неактуально

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

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

Я пишу на питоне :)

Тогда тебе никогда не понять программера на ассемблере.

vadim-lor ()

А чем плох as?

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

>Я вообще не понимаю, какой мазохист пишет на асме, в наш век мегакомпиляторов на С. Код получается на порядки хуже, ибо невозможно применить многие виды оптимизации, которые может сделать только компьютер.

Вирмейкеры смотрят на тебя как на ... ;D

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

Я думаю вирмейкеры на тебя смотрят также неодобрительно. Главное у них - не оптимизация, а нахождение и использование уязвимостей. И да, не надо считать, что вирусы пишут исключительно на ассемблере. Взять хотя бы замечательные статьи Ms-Rem'a на васме, где для примеров использован Delphi(!).

nnm ()

> уже широкое использование yasm в различных opensource проектах

Это в каких? А то только nasm попадался.

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

Хотя, если подумать, то да, оптимизируют по размеру, чтобы, например, уместиться в заголовке PE-файла.

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

>Я думаю вирмейкеры на тебя смотрят также неодобрительно.

Ты думаешь неправильно.

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

>> Я думаю вирмейкеры на тебя смотрят также неодобрительно.

Ты думаешь неправильно.


Отличный аргументированный ответ

nnm ()
Ответ на: комментарий от Sun-ch

>Для серьезной математики используют библиотеки, высокооптимизированные и самое главное - портабельные и очень хорошо оттестированные.

Ну так и загляни в их код, раз говоришь что асм уже не нужен.

madcore ★★★★★ ()

Классно, что есть NASM-синтаксис, я уж думал что под линухом только с AT&T нужно долбаться.

Осталось чтоб появился отладчик уровня OllyDbg с человеческим интерфейсом, и уже можно детей и студентов обучать ассемблеру и показывать как микропроцессор устроен.

xintrea ()

Хорошая новость. Где-то пару лет назад это был единственный ассемблер, поддерживающий masm-синтаксис и 64-битные Mach-O одновременно.

Relan ★★★★★ ()
Ответ на: комментарий от Sun-ch

Для серьезной математики используют библиотеки, высокооптимизированные


А кто-то их ведь должен писать.

anonizmus ()
Ответ на: комментарий от vadim-lor

> Fasm рулит

+1

Не поддерживает Mach-O. В топку.

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

Обычный GNU as вполне поддерживает интеловский синтаксис.

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

http://www.kalinin.ru/programming/opt/22_06_01.shtml

Хоть статья и старовата, но суть понятна: некоторые мазохисты добиваются кода на порядки лучше :)

возможно там и написаны правильные вещи, но (!) реальной аргументации очень мало, в основном «короче, я тебе говорю - так лучше будет»

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

перед тем как говорить о бороздящих просторы вселенной кромпиляторах, что стоит почитать бенчмарки. Например: http://blog.lexa.ru/2007/01/27/umnozhenie_matric_serija_2_woodcrest_protiv_op...

читаем внимательно, смотрим на чём ставились опыты:

Opteron - WinXP x64, Woodcrest - Linux (Gentoo какой-то)

большой пыщщьь... даже фороникс качественнее подходит к тестированию

shty ★★★★★ ()
Ответ на: Хватит растекаться мыслю по древу! от AF

Re: Хватит растекаться мыслю по древу!

Лехко.

To get full 4-issue per cycle on UltraSPARC, the
fourth instruction in the instruction group must be either
a conditional branch or a floating point instruction.

At best we previously could only tell the Haifa scheduler that
we had 2 FPU units, and 2 Integer units, yet not special
issuing rules such as this one. So consider a case where 2
integer and 2 FPU instructions could be issued this cycle,
Haifa often would not get full 4 issue such as:

add    %o0, 1, %o0
    faddd    %f0, %f2, %f0
    fmuld    %f4, %f6, %f4
    srlx    %o1, 1, %o1

Here Haifa has made two mistakes due to lack of information.
Firstly it missed the «shift/ialu» ordering rule mentioned
above, secondly it placed the integer instruction in the
fourth slot. Haifa would get 3 issue in this case. The new
UltraSPARC scheduling support will instead output:

    srlx    %o1, 1, %o1
add    %o0, 1, %o0
    faddd    %f0, %f2, %f0
    fmuld    %f4, %f6, %f4

Для тех кто не понял, нужно комбинировать код так, чтобы за 1 такт - выполнить сразу 4 инструкции. Компилятор это может, а человек нет.

Sun-ch ()
Ответ на: комментарий от nnm

Для того, чтобы оптимизировать на уровне компилятора нужно нехило разбираться в оптимизации.

ога, быть выспатым, наетым, чтобы никто не мешал, был вагон времен и это всё без гарантии

человеческий фактор, а что Вы хотите?

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

Конечно нужно. Вот ты к примеру знаешь сколько конвееров у ксеона 5000 серии, и какова их глубина? Как реализованно спекуляпивное исполнение? А компилятор знает, и еще много чего, про что в книжках не пишут.

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