mirror of
https://github.com/logos-storage/plonky2.git
synced 2026-01-02 22:03:07 +00:00
blake precompile progress
This commit is contained in:
parent
b288ff5f0d
commit
86acc15f12
@ -14,48 +14,84 @@ global precompile_blake2_f:
|
||||
|
||||
// Copy the call data to the kernel general segment (blake2b expects it there) and call blake2b.
|
||||
%calldatasize
|
||||
|
||||
// stack: size
|
||||
%stack () -> (@SEGMENT_CALLDATA, 0, 4)
|
||||
GET_CONTEXT
|
||||
// stack: ctx, size
|
||||
%stack (ctx) -> (ctx, @SEGMENT_CALLDATA, 0, 4, blake2_f_contd)
|
||||
%jump(mload_packing)
|
||||
blake2_f_contd:
|
||||
// stack: ctx, @SEGMENT_CALLDATA, 0, 4, size
|
||||
%mload_packing
|
||||
// stack: rounds, size
|
||||
|
||||
PUSH 4
|
||||
%rep 8
|
||||
// stack: 4 + 8 * i, h_(i-1), ..., h_0, rounds, size
|
||||
DUP1
|
||||
// stack: 4 + 8 * i, 4 + 8 * i, h_(i-1), ..., h_0, rounds, size
|
||||
PUSH 8
|
||||
// stack: 8, 4 + 8 * i, h_(i-1), ..., h_0, rounds, size
|
||||
DUP2
|
||||
// stack: 4 + 8 * i, 8, 4 + 8 * i, h_(i-1), ..., h_0, rounds, size
|
||||
PUSH @SEGMENT_CALLDATA
|
||||
// stack: @SEGMENT_CALLDATA, 4 + 8 * i, 8, 4 + 8 * i, h_(i-1), ..., h_0, rounds, size
|
||||
GET_CONTEXT
|
||||
// stack: ctx, 4 + 8 * i, 4 + 8 * i, h_(i-1), ..., h_0, rounds, size
|
||||
%stack (ctx, offset) -> (ctx, @SEGMENT_KERNEL_GENERAL, offset, 8)
|
||||
// stack: ctx, @SEGMENT_CALLDATA, 4 + 8 * i, 8, 4 + 8 * i, h_(i-1), ..., h_0, rounds, size
|
||||
%mload_packing
|
||||
// stack: h_i, 4 + 8 * i, h_(i-1), ..., h_0, rounds, size
|
||||
SWAP1
|
||||
// stack: 4 + 8 * i, h_i, h_(i-1), ..., h_0, rounds, size
|
||||
%endrep
|
||||
|
||||
|
||||
// stack: ctx, rounds, size
|
||||
%stack (ctx) ->
|
||||
// stack: rounds, size
|
||||
PUSH 4
|
||||
// stack: 4, rounds, size
|
||||
%rep 8
|
||||
// stack: 4 + 8 * i, h_(i-1), ..., h_0, rounds, size
|
||||
DUP1
|
||||
// stack: 4 + 8 * i, 4 + 8 * i, h_(i-1), ..., h_0, rounds, size
|
||||
%mload_current_u64(@SEGMENT_CALLDATA)
|
||||
// stack: h_i, 4 + 8 * i, h_(i-1), ..., h_0, rounds, size
|
||||
SWAP1
|
||||
// stack: 4 + 8 * i, h_i, h_(i-1), ..., h_0, rounds, size
|
||||
%add_const(8)
|
||||
// stack: 4 + 8 * (i + 1), h_i, h_(i-1), ..., h_0, rounds, size
|
||||
%endrep
|
||||
// stack: h_7, ..., h_0, rounds, size
|
||||
// stack: 4 + 8 * 8 = 68, h_7, ..., h_0, rounds, size
|
||||
|
||||
%rep 16
|
||||
// stack: 68 + 8 * i, m_(i-1), ..., m_0, h_7..h_0, rounds, size
|
||||
PUSH 8
|
||||
// stack: 8, 68 + 8 * i, m_(i-1), ..., m_0, h_7..h_0, rounds, size
|
||||
DUP2
|
||||
// stack: 68 + 8 * i, 8, 68 + 8 * i, m_(i-1), ..., m_0, h_7..h_0, rounds, size
|
||||
PUSH @SEGMENT_CALLDATA
|
||||
// stack: @SEGMENT_CALLDATA, 68 + 8 * i, 8, 68 + 8 * i, m_(i-1), ..., m_0, h_7..h_0, rounds, size
|
||||
GET_CONTEXT
|
||||
// stack: ctx, @SEGMENT_CALLDATA, 68 + 8 * i, 8, 68 + 8 * i, m_(i-1), ..., m_0, h_7..h_0, rounds, size
|
||||
%mload_packing
|
||||
// stack: m_i, 68 + 8 * i, m_(i-1), ..., m_0, h_7..h_0, rounds, size
|
||||
SWAP1
|
||||
// stack: 68 + 8 * i, m_i, m_(i-1), ..., m_0, h_7..h_0, rounds, size
|
||||
%add_const(8)
|
||||
%endrep
|
||||
// stack: 68 + 8 * 16 = 196, m_15, ..., m_0, h_7..h_0, rounds, size
|
||||
|
||||
%stack (offset) -> (@SEGMENT_CALLDATA, offset, 8, offset)
|
||||
// stack: @SEGMENT_CALLDATA, 196, 8, 196, m_15..m_0, h_7..h_0, rounds, size
|
||||
GET_CONTEXT
|
||||
// stack: ctx, @SEGMENT_CALLDATA, 196, 8, 196, m_15..m_0, h_7..h_0, rounds, size
|
||||
%mload_packing
|
||||
// stack: t_0, 196, m_15..m_0, h_7..h_0, rounds, size
|
||||
SWAP1
|
||||
// stack: 196, t_0, m_15..m_0, h_7..h_0, rounds, size
|
||||
%add_const(8)
|
||||
// stack: 204, t_0, m_15..m_0, h_7..h_0, rounds, size
|
||||
|
||||
%stack (offset) -> (@SEGMENT_CALLDATA, offset, 8, offset)
|
||||
// stack: @SEGMENT_CALLDATA, 204, 8, 204, t_0, m_15..m_0, h_7..h_0, rounds, size
|
||||
GET_CONTEXT
|
||||
// stack: ctx, @SEGMENT_CALLDATA, 204, 8, 204, t_0, m_15..m_0, h_7..h_0, rounds, size
|
||||
%mload_packing
|
||||
// stack: t_1, 204, t_0, m_15..m_0, h_7..h_0, rounds, size
|
||||
SWAP1
|
||||
// stack: 204, t_1, t_0, m_15..m_0, h_7..h_0, rounds, size
|
||||
%add_const(8)
|
||||
// stack: 212, t_1, t_0, m_15..m_0, h_7..h_0, rounds, size
|
||||
|
||||
PUSH @SEGMENT_CALLDATA
|
||||
GET_CONTEXT
|
||||
// stack: ctx, @SEGMENT_CALLDATA, 212, t_1, t_0, m_15..m_0, h_7..h_0, rounds, size
|
||||
MLOAD_GENERAL
|
||||
// stack: f, t_1, t_0, m_15..m_0, h_7..h_0, rounds, size
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// TODO: change
|
||||
// The next block of code is equivalent to the following %stack macro call
|
||||
// (unfortunately the macro call takes too long to expand dynamically).
|
||||
//
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user