Що за бредятина? По-перше я чудово знаю як проц читає дані з пам'яті, по-друге до тебе не доходить що для того щоб витягнути невирівняне слово треба від 22 до 46 команд ріск-в, лінки на те що генерує компілятор на попередній сторінці. А компілятор не дурень, просто архітектура така калічна. х86 і арм64 обходяться в 1 і 2 команди в залежності від ендіанес.
Відправлено через 4 хвилини 59 секунд:
На х86 в останніх авх є навіть команда завантаження з різними порядками, тобто 1 і 1 команди виходить. Одна замість 46, ага.
Відправлено через 9 хвилин 35 секунд:
Код: Выделить всё
#[no_mangle]
pub fn read_u32(buf: &[u8; 8]) -> u64 {
u64::from_be_bytes(*buf)
}
--target aarch64-unknown-linux-gnu -C opt-level=3
--target x86_64-unknown-linux-gnu -C opt-level=3
Код: Выделить всё
read_u32:
mov rax, qword ptr [rdi]
bswap rax
ret
--target riscv64gc-unknown-linux-gnu -C opt-level=3
Код: Выделить всё
read_u32:
lbu a7, 0(a0)
lbu a6, 1(a0)
lbu a3, 2(a0)
lbu a4, 3(a0)
lbu a5, 4(a0)
lbu a2, 5(a0)
lbu a1, 6(a0)
lbu a0, 7(a0)
lui t0, 4080
slli a3, a3, 16
slli a4, a4, 24
or t1, a4, a3
li a4, 255
slli a2, a2, 8
or a2, a2, a5
slli a5, a1, 16
slli a0, a0, 24
or a0, a0, a5
lui a5, 16
slli t2, a4, 24
addi a5, a5, -256
slli a6, a6, 8
slli a1, a1, 8
or a3, a6, a7
slli a7, a7, 56
or a3, t1, a3
or a0, a0, a2
slli a2, a0, 32
srliw a0, a0, 24
and a5, a5, a3
or a2, a2, a3
or a0, a0, a1
slli a5, a5, 40
srli a1, a2, 24
srli a3, a2, 8
srliw a4, a2, 24
and a2, a2, t0
or a5, a7, a5
and a1, a1, t0
and a3, a3, t2
slli a4, a4, 32
slli a2, a2, 24
or a1, a1, a3
or a2, a2, a4
or a0, a0, a1
or a2, a2, a5
or a0, a0, a2
ret
І так тупо всюди. Куди не плюнь, на ріск-5 всюди якась лажа. Прямо ідеальний приклад як робити не треба.
Відправлено через 14 хвилин 11 секунд:
--target powerpc64le-unknown-linux-gnu -C opt-level=3
Рекордсмен. 1 команда штатно без додаткових розширень. Бо IBM це вам не

собачий. Там про щось думали коли створювали ISA.