Anonymous 06/05/2019 (Wed) 07:57:33 No.1965 del
Есть небольшой прогресс.
Laisi код
u8 a := 5;

func (u8,[u32 c0,f32e8 c1]) main := {
u8 a := 8 + 5;
};
преобразуется в репрезентованный laisi-байткод:
u8 @0 := 0x5

func(u8,[u32 %0,f32e8 %1]) @1 := {
%2 := 0x8 + 0x5;
%3 := alloc u8 := %2;
}
То есть сложные операции разделяются на простые. После, этот байткод может быть послан в бекенд — компилятор для LLVM, а из LLVM в следующий бекенд — компилятор LLVM, который преобразует LLVM-биткод в машинный код и микрокод, а микрокод пойдёт в следующий бекенд — экзекутор микрокода в процессоре.
Но я не сделал всё в операциях, если будет a := (5 + 3) + (8 - 2), то зачем выполнять последовательно (5 + 3), затем (8 - 2) и, наконец, результат0 + результат1 если выполнение в скобках можно распараллелить? А мой ЯП поддерживает параллельные инструкции. Это может быть полезно для всяких будущих VLIW-архитектур, а может быть и для современных SIMD-инструкций.
Но вообще для SIMD-инструкций в моём ЯП подходят операции по типу a[:] := (b[:] + c[:])*d[:] - e[:]

Message too long. Click here to view full text.