LLVM генерирует использование стека на простой функции RISC-V, где GCC неC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 LLVM генерирует использование стека на простой функции RISC-V, где GCC не

Сообщение Anonymous »

У меня есть простая функция: < /p>

Код: Выделить всё

extern "C" Variant test_bool(bool arg) {
return arg;
}
< /code>
Создан в основном стандартными настройками (я снял часть пути): < /p>
zig c++ -target riscv64-linux-musl -I/tests -I/tests/.zig -O3 -DNDEBUG -mcpu=baseline_rv64+rva22u64 -mabi=lp64d -O3 -std=gnu++23 -fno-stack-protector -fno-threadsafe-statics -MD -MT /test_basic.cpp.o -MF /test_basic.cpp.o.d -o /test_basic.cpp.o -c /test_basic.cpp
< /code>
Мне нужна помощь, чтобы понять, почему LLVM генерирует это: < /p>
000000000013a56a :
test_bool():
13a56a:       1141                    addi    sp,sp,-16
13a56c:       e406                    sd      ra,8(sp)
13a56e:       e022                    sd      s0,0(sp)
13a570:       0800                    addi    s0,sp,16
13a572:       4605                    li      a2,1
13a574:       c110                    sw      a2,0(a0)
13a576:       00b50423                sb      a1,8(a0)
13a57a:       60a2                    ld      ra,8(sp)
13a57c:       6402                    ld      s0,0(sp)
13a57e:       0141                    addi    sp,sp,16
13a580:       8082                    ret
< /code>
Когда GCC правильно издает это: < /p>
0000000000012156 :
test_bool():
12156:       4705                    li      a4,1
12158:       c118                    sw      a4,0(a0)
1215a:       00b50423                sb      a1,8(a0)
1215e:       8082                    ret
< /code>
Конструктор варианта - contexpr: < /p>
template 
inline constexpr Variant::Variant(T value)
{
if constexpr (std::is_same_v) {
m_type = BOOL;
v.b = value;
}
else if constexpr (std::is_integral_v) {
...
} ...
< /code>
Вариант - это простой союз с типом: < /p>
private:
Type m_type = NIL;
union {
int64_t  i;
bool     b;
double   f;
real_t   v4[4];
int32_t  v4i[4];
} v;
Любые идеи о том, что может быть причиной дополнительных инструкций?

Подробнее здесь: https://stackoverflow.com/questions/797 ... gcc-doesnt
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Xcode 5 путь llvm-g++ и llvm-gcc?
    Anonymous » » в форуме IOS
    0 Ответы
    31 Просмотры
    Последнее сообщение Anonymous
  • Llvm/IR/Attributes.inc: такого файла или каталога нет при записи игрушечного компилятора с использованием LLVM.
    Anonymous » » в форуме C++
    0 Ответы
    63 Просмотры
    Последнее сообщение Anonymous
  • LLVM `llvm/support/host.h` на C ++ Macos Arm64 не существует (Cmake)
    Anonymous » » в форуме C++
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • LLVM `llvm/support/host.h` на C ++ Macos Arm64 не существует (Cmake)
    Anonymous » » в форуме C++
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Halide CompileError выдается при компиляции статической библиотеки для RISC-V
    Anonymous » » в форуме C++
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»