Захотелось что нибудь несложное покомпилировать.
Например хэловорд на си: https://pastebin.com/KFNHABjm (генератор цветового uid из строк)
Компилировал с такими опциями:g++ -S -O2 -march=x86-64 -std=c++11 test.cpp
l++ -S -O3 -mcpu=elbrus-v3 -std=c++11 test.cpp
$ g++ --version
# g++ (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609
$ l++ --version
# lcc:1.20.17:Mar-3-2016:e2k-generic-linux.cross:i386-linux
# gcc (GCC) 4.4.0 compatible
Для интела получился слишком большой выхлоп 900kb 32k строк (выкладывать безсмысленно)
Для второго 250kb 9k строк (почему такая разница? инклюды не входят?)
собственно выхлоп: https://pastebin.com/WC2CuZ5k есть довольно любопытные участки и операции
Одна условная запись и непонятная магия с регистрами/предикатами и все в одной инструкции, после которой вставлена пустая инструкция (пропуск такта?)
{
ct %ctpr3 ? ~%pred0
std,2 %dg13, %dr12, %dr11 ? %pred0
pass %pred0, @p0
pass %pred1, @p1
landp @p0, ~@p1, @p4
pass @p4, %pred2
landp @p0, @p1, @p5
pass @p5, %pred1
}
{
}
пут-тег, слияние, istofd (int-single to float-double ?), sxt/scls (???)
$_ZNSs12_S_constructIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEPcT_S6_RKSaIcESt20forward_iterator_tag:
{
setwd wsz = 0x13, nfx = 0x1
setbn rsz = 0x3, rbs = 0xf, rcur = 0x0
disp %ctpr1, $.L4337; ipd 2
getsp,0 _f32s,_lts1 0xfffff960, %dr5
addd,1 0x0, [ _f64,_lts2 $_GLOBAL_OFFSET_TABLE_@ABS ], %dr3
puttagd,2 %dr0, 0x0, %dr17
adds,3,sm 0x0, 0x0, %r21
addd,4,sm 0x0, 0x0, %dr20
puttagd,5 %dr1, 0x0, %dr16
}
...
{
merges,0 %g16, %g21, %g16, %pred0
}
...
{
setwd wsz = 0x20, nfx = 0x1
setbn rsz = 0x3, rbs = 0x15, rcur = 0x0
disp %ctpr1, $.L2085; ipd 2
addd,0 0x0, _f64,_lts1 0x20ff2000000000, %dg16
sxt,1 0x6, %r5, %dg17
scls,2 0x9, 0x9, %r1
}
...
{
call %ctpr3, wbs = 0x1c ? %pred0
istofd,0,sm %r1, %dr1
}
Ну и какой то тяжелый цикл с долгими одиночными инструкциями (fdtoidtr - 6 тактов, fmuld - 4 такта, итд. Если я правильно понял как это читать)
$.L1779:
{
loop_mode
nop 3
faddd,1,sm %dr1, %db[2], %db[0]
}
{
loop_mode
nop 3
fmuld,1,sm %dr7, %db[0], %db[0]
}
{
loop_mode
nop 5
fdtoidtr,1,sm %db[0], %db[1]
}
{
loop_mode
sxt,2,sm 0x6, %b[1], %db[1]
}
{
loop_mode
nop 3
idtofd,1,sm %db[1], %db[1]
}
{
loop_mode
nop 3
fsubd,1,sm %db[0], %db[1], %db[0]
}
{
loop_mode
nop 3
fmuld,1,sm %db[0], %db[1], %db[0]
}
{
loop_mode
nop 5
fdtoidtr,1,sm %db[0], %db[1]
}
{
loop_mode
sxt,2,sm 0x6, %b[1], %db[1]
}
{
loop_mode
nop 3
idtofd,1,sm %db[1], %db[1]
}
{
loop_mode
nop 3
fsubd,1,sm %db[0], %db[1], %db[0]
}
{
loop_mode
nop 2
fmuld,1,sm %db[0], %dr5, %db[0]
ldb,2,sm %dr6, %dr2, %b[3]
addd,5,sm %dr2, 0x1, %dr2
}
{
loop_mode
getfs,2,sm %b[3], %r4, %b[2]
}
{
loop_mode
nop 2
istofd,0,sm %b[2], %db[0]
faddd,1,sm %db[1], %db[0], %dr1 ? %pcnt0
}
{
loop_mode
alc alcf=1, alct=1
abn abnf=1, abnt=1
ct %ctpr1 ? %NOT_LOOP_END
}
Устанавливаентся вытряхиванием архива в /opt/mcst/ и симлинканьем lcc и l++ куда нибудь в /usr/local/bin