История изменений
Исправление 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 надо явно указывать длину чисел в байтах (и я не уверен, что совпадает выравнивание в структурах).
Господи… ничего тупее я сегодня, кажется, уже не прочитаю.