LINUX.ORG.RU

История изменений

Исправление hateyoufeel, (текущая версия) :

В стандартной библиотеке и x86 нет и вывода графики, например. А в библиотеке для x86 есть SIMD.

А нахера тебе тогда Си?

Почти гарантирует. Если есть доступ к телу функции и функция однострочник, то инлайн точно будет.

Почти? На полшишечки?

Покажи строку на LLVM.

Ну, держи.

@.str = private unnamed_addr constant [12 x i8] c"errno = %d\0A\00", align 1

; Function Attrs: noinline nounwind optnone uwtable
define dso_local i32 @main() #0 {
  %1 = alloca i32, align 4
  store i32 0, ptr %1, align 4
  %2 = call ptr @__errno_location() #3
  %3 = load i32, ptr %2, align 4
  %4 = call i32 (ptr, ...) @printf(ptr noundef @.str, i32 noundef %3)
  ret i32 0
}

declare i32 @printf(ptr noundef, ...) #1

; Function Attrs: nounwind willreturn memory(none)
declare ptr @__errno_location() #2

Нынешние glibc сделали доступ к errno через вызов функции.

Тут ты можешь начать ныть, что раз мы дёргаем сишную функцию, значит надо всё писать на си, но это очень тупо будет.

В него даже вызов getchar генерить заколебёшься, потому что для него надо посмотреть, сколько байтов в int в целевой архитектуре.

Эээээ… что? Ты сейчас серьёзно аргументом против использования LLVM пытаешься притянуть то, что нужно соблюдать calling conventions платформы? Ты совсем с дуба рухнул #2?

ОС у нас POSIX. И все типы определены в сишных типах. А для LLVM надо явно указывать длину чисел в байтах (и я не уверен, что совпадает выравнивание в структурах).

Господи… ничего тупее я сегодня, кажется, уже не прочитаю.

Исходная версия hateyoufeel, :

В стандартной библиотеке и x86 нет и вывода графики, например. А в библиотеке для x86 есть SIMD.

А нахера тебе тогда Си?

Почти гарантирует. Если есть доступ к телу функции и функция однострочник, то инлайн точно будет.

Почти? На полшишечки?

Покажи строку на LLVM.

Ну, держи.

; Function Attrs: noinline nounwind optnone uwtable
define dso_local i32 @main() #0 {
  %1 = alloca i32, align 4
  store i32 0, ptr %1, align 4
  %2 = call ptr @__errno_location() #3
  %3 = load i32, ptr %2, align 4
  %4 = call i32 (ptr, ...) @printf(ptr noundef @.str, i32 noundef %3)
  ret i32 0
}

declare i32 @printf(ptr noundef, ...) #1

; Function Attrs: nounwind willreturn memory(none)
declare ptr @__errno_location() #2

Нынешние glibc сделали доступ к errno через вызов функции.

Тут ты можешь начать ныть, что раз мы дёргаем сишную функцию, значит надо всё писать на си, но это очень тупо будет.

В него даже вызов getchar генерить заколебёшься, потому что для него надо посмотреть, сколько байтов в int в целевой архитектуре.

Эээээ… что? Ты сейчас серьёзно аргументом против использования LLVM пытаешься притянуть то, что нужно соблюдать calling conventions платформы? Ты совсем с дуба рухнул #2?

ОС у нас POSIX. И все типы определены в сишных типах. А для LLVM надо явно указывать длину чисел в байтах (и я не уверен, что совпадает выравнивание в структурах).

Господи… ничего тупее я сегодня, кажется, уже не прочитаю.