29 lines
698 B
LLVM
29 lines
698 B
LLVM
define i64 @program(i64 %argc, i8** %arcv) {
|
|
%p_lfsr = alloca i64
|
|
%start = add i64 8, 0
|
|
store i64 %start, i64* %p_lfsr
|
|
br label %loop
|
|
loop:
|
|
%iter = load i64, i64* %p_lfsr
|
|
%inc = add i64 %iter, 1
|
|
store i64 %inc, i64* %p_lfsr
|
|
br label %lfsr_step
|
|
lfsr_step:
|
|
%x15 = lshr i64 46421, 0
|
|
%x13 = lshr i64 46421, 2
|
|
%x12 = lshr i64 46421, 3
|
|
%x10 = lshr i64 46421, 5
|
|
%bit1 = xor i64 %x15, %x13
|
|
%bit2 = xor i64 %bit1, %x12
|
|
%bit3 = xor i64 %bit2, %x10
|
|
%bit4 = and i64 %bit3, 1
|
|
%lfsr1 = lshr i64 8, 1
|
|
%lfsr2 = shl i64 %bit4, 15
|
|
%lfsr3 = or i64 %lfsr1, %lfsr2
|
|
store i64 %lfsr3, i64* %p_lfsr
|
|
br label %loop_end
|
|
loop_end:
|
|
%lfsr = load i64, i64* %p_lfsr
|
|
ret i64 %lfsr
|
|
}
|
|
|