plonky2/evm/src/cpu/kernel/asm/hash/blake/compression.asm

78 lines
1.9 KiB
NASM
Raw Normal View History

2022-12-09 09:34:42 -08:00
%macro blake_compression_internal_state_addr
PUSH 0
%endmacro
2022-11-07 14:30:14 -08:00
%macro blake_compression_message_addr
PUSH 16
%endmacro
2022-11-03 16:01:08 -07:00
global blake_compression:
2022-12-09 09:34:42 -08:00
// stack: h_0, ..., h_7, t_0, t_1, f_0, f_1, m_0, ..., m_15
2022-11-04 15:27:34 -07:00
%blake_compression_internal_state_addr
// stack: start, h_0, ..., h_7, t_0, t_1, f_0, f_1, m_0, ..., m_15
%rep 8
SWAP1
DUP2
%mstore_kernel_general
%increment
%endrep
// stack: start + 8, t_0, t_1, f_0, f_1, m_0, ..., m_15
PUSH 0
// stack: 0, start + 8, t_0, t_1, f_0, f_1, m_0, ..., m_15
%rep 4
2022-11-07 14:30:14 -08:00
// stack: i, loc, ...
DUP2
DUP2
// stack: i, loc, i, loc,...
%blake_iv
// stack: IV_i, loc, i, loc,...
SWAP1
// stack: loc, IV_i, i, loc,...
%mstore_kernel_general
// stack: i, loc,...
%increment
SWAP1
%increment
SWAP1
// stack: i + 1, loc + 1,...
%endrep
%rep 4
// stack: i, loc, val, next_val, next_val,...
%stack (i, loc, val) -> (i, val, loc, i, loc)
// stack: i, val, loc, i, loc, next_val,...
%blake_iv
// stack: IV_i, val, loc, i, loc, next_val,...
XOR
// stack: val ^ IV_i, loc, i, loc, next_val,...
SWAP1
// stack: loc, val ^ IV_i, i, loc, next_val,...
%mstore_kernel_general
// stack: i, loc, next_val,...
%increment
SWAP1
%increment
SWAP1
// stack: i + 1, loc + 1, next_val,...
%endrep
// stack: 8, loc + 16, m_0, ..., m_15
POP
POP
// stack: m_0, ..., m_15
%blake_compression_message_addr
// stack: addr, m_0, ..., m_15
%rep 16
2022-11-04 15:27:34 -07:00
%endrep
2022-11-07 14:30:14 -08:00
PUSH 0
// stack: round=0, m_0, ..., m_15
compression_loop:
// stack: round, m_0, ..., m_15
PUSH 0
DUP2
// stack: round, 0, round, m_0, ..., m_15
%blake_permutation
// stack: s[0], round, m_0, ..., m_15
2022-11-04 15:27:34 -07:00