LINUX.ORG.RU
ФорумTalks

[похорониксъ] Тест компиляторов


0

1

http://www.phoronix.com/scan.php?page=article&item=linux_compiler_deathmatch&...
Результаты довольно интересные, я считаю.
Для Ъ:
LLVM-GCC и Open64 в некоторых тестах уделывают GCC и очень прилично.

★★★★★

Последнее исправление: devl547 (всего исправлений: 1)

А почему у некоторых компиляторов по 1 в арифметических операциях с плавающей точкой

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

>у некоторых компиляторов

В том числе и у Gcc, очевидно баги какие-то.

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

А вывод какой? На каждую задачу - свой инструмент.

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

>а они годны для всей системы?

На старом ноуте собирал генту с 4 компиляторами в системе (gcc, llvm-gcc, open64, icc). Работало, но это костыли.

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

Но в большинстве-то тестов гцц всех рвёт, так что пока его выбрасывать рановато.

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

>его рановато выкидывать и из-за ядра например - многие проги использую gcc-мы

Тоже мне проблему нашел

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

>ну ну...

молодец чо - патч ядро и всё остальное - потом тока не ной!


А мне зачем?

Если надо будет - GCCизмы заменят за 1 релиз.

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

Хмм.. Clang/LLVM очень даже. Надо потестить повнимательней.

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

>Первый раз услышал про Open64...

я тебе странную вещь скажу - хотя его создали в SGI, а последнее время развивают в AMD, но intel тоже очень нехило руку приложил.

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

тем не менее - гцц-мы есть и в большом кол-ве
все это перепиливать ни разу не собираются 100%

megabaks ★★★★
()

Чтот не нашел, с какими флагами собирали.
И атом не нужен, если что.

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

Доо. И чем ты заменишь, например ({ и __typeof__ в get_user?

Ну __typeof__ в get_user заменить вообще не проблема. Глобально заменить typeof - это добавить тип в параметры макроса.

({ с небольшимы потерями можно заменить на два макроса, один из которых будет определять inline функцию, а второй - ее использовать.

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

> Ну __typeof__ в get_user заменить вообще не проблема

Замени.

({ с небольшимы потерями можно заменить на два макроса, один из которых будет определять inline функцию, а второй - ее использовать.

Ну то есть ты предлагаешь перелопатить тонну кода? Короче, определения макросов - в студию.

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

asm_generic.h:

#define __get_user(x, ptr)					\
({								\
	int __gu_err = -EFAULT;					\
	__chk_user_ptr(ptr);					\
	switch (sizeof(*(ptr))) {				\
	case 1: {						\
		unsigned char __x;				\
		__gu_err = __get_user_fn(sizeof (*(ptr)),	\
					 ptr, &__x);		\
		(x) = *(__force __typeof__(*(ptr)) *) &__x;	\
		break;						\
	};							\
	case 2: {						\
		unsigned short __x;				\
		__gu_err = __get_user_fn(sizeof (*(ptr)),	\
					 ptr, &__x);		\
		(x) = *(__force __typeof__(*(ptr)) *) &__x;	\
		break;						\
	};							\
	case 4: {						\
		unsigned int __x;				\
		__gu_err = __get_user_fn(sizeof (*(ptr)),	\
					 ptr, &__x);		\
		(x) = *(__force __typeof__(*(ptr)) *) &__x;	\
		break;						\
	};							\
	case 8: {						\
		unsigned long long __x;				\
		__gu_err = __get_user_fn(sizeof (*(ptr)),	\
					 ptr, &__x);		\
		(x) = *(__force __typeof__(*(ptr)) *) &__x;	\
		break;						\
	};							\
	default:						\
		__get_user_bad();				\
		break;						\
	}							\
	__gu_err;						\
})

Часть:

#define __get_user(x, ptr)					\
({								\
	int __gu_err = -EFAULT;					\
	__chk_user_ptr(ptr);					\
	switch (sizeof(*(ptr))) {				\
...
	case 2: {						\
		u16 __x;				\
		__gu_err = __get_user_fn(2,	\
					 ptr, &__x);		\
		*((u16*)(void*)&x) = __x;	\
		break;						\
	};							\
...
})

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

>Ну то есть ты предлагаешь перелопатить тонну кода?

Нет я только сказал, что это возможно. Я вообще ничего не предлагаю.

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

>> Ну то есть ты предлагаешь перелопатить тонну кода?

Нет я только сказал, что это возможно.

А, то есть ты не имел в виду «это возможно на практике»? Тогда вопросов нет.

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

>Насколько я вижу, ты теряешь проверку типов - замена неравноценна.

А она там была?)

Вообще, макросы и проверка типов - это не смешно.

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

>А, то есть ты не имел в виду «это возможно на практике»? Тогда вопросов нет.

Я имел ввиду «если бы вдруг мир повернулся и (к примеру) в gcc исчезли все его расширения, то за время 1 релиза можно было бы убрать их из ядра».

И про ({:

Если коротко - вместо основного #define - #define №1 c ипределением inline ф-ции с заднным типом и #define №2 с вызовом ф-ции. Имя ф-ции - вида de_what_you_want_ ## type.

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