mirror of
https://github.com/logos-storage/plonky2.git
synced 2026-01-08 16:53:07 +00:00
Merge branch 'precompile-fixes' into blake_precompile
This commit is contained in:
commit
b288ff5f0d
@ -11,25 +11,30 @@ global precompile_bn_add:
|
|||||||
%charge_gas_const(@BN_ADD_GAS)
|
%charge_gas_const(@BN_ADD_GAS)
|
||||||
|
|
||||||
// Load x0, y0, x1, y1 from the call data using `mload_packing`.
|
// Load x0, y0, x1, y1 from the call data using `mload_packing`.
|
||||||
|
PUSH bn_add_return
|
||||||
|
// stack: bn_add_return, kexit_info
|
||||||
|
%stack () -> (@SEGMENT_CALLDATA, 96, 32)
|
||||||
GET_CONTEXT
|
GET_CONTEXT
|
||||||
%stack (ctx, kexit_info) -> (ctx, @SEGMENT_CALLDATA, 96, 32, bn_add_contd, kexit_info)
|
// stack: ctx, @SEGMENT_CALLDATA, 96, 32, bn_add_return, kexit_info
|
||||||
%jump(mload_packing)
|
%mload_packing
|
||||||
bn_add_contd:
|
// stack: y1, bn_add_return, kexit_info
|
||||||
|
%stack () -> (@SEGMENT_CALLDATA, 64, 32)
|
||||||
GET_CONTEXT
|
GET_CONTEXT
|
||||||
%stack (ctx, y1, kexit_info) -> (ctx, @SEGMENT_CALLDATA, 64, 32, bn_add_contd2, y1, kexit_info)
|
// stack: ctx, @SEGMENT_CALLDATA, 64, 32, y1, bn_add_return, kexit_info
|
||||||
%jump(mload_packing)
|
%mload_packing
|
||||||
bn_add_contd2:
|
// stack: x1, y1, bn_add_return, kexit_info
|
||||||
|
%stack () -> (@SEGMENT_CALLDATA, 32, 32)
|
||||||
GET_CONTEXT
|
GET_CONTEXT
|
||||||
%stack (ctx, x1, y1, kexit_info) -> (ctx, @SEGMENT_CALLDATA, 32, 32, bn_add_contd3, x1, y1, kexit_info)
|
// stack: ctx, @SEGMENT_CALLDATA, 32, 32, x1, y1, bn_add_return, kexit_info
|
||||||
%jump(mload_packing)
|
%mload_packing
|
||||||
bn_add_contd3:
|
// stack: y0, x1, y1, bn_add_return, kexit_info
|
||||||
|
%stack () -> (@SEGMENT_CALLDATA, 0, 32)
|
||||||
GET_CONTEXT
|
GET_CONTEXT
|
||||||
%stack (ctx, y0, x1, y1, kexit_info) -> (ctx, @SEGMENT_CALLDATA, 0, 32, bn_add_contd4, y0, x1, y1, kexit_info)
|
// stack: ctx, @SEGMENT_CALLDATA, 0, 32, y0, x1, y1, bn_add_return, kexit_info
|
||||||
%jump(mload_packing)
|
%mload_packing
|
||||||
bn_add_contd4:
|
// stack: x0, y0, x1, y1, bn_add_return, kexit_info
|
||||||
%stack (x0, y0, x1, y1, kexit_info) -> (x0, y0, x1, y1, bn_add_contd5, kexit_info)
|
|
||||||
%jump(bn_add)
|
%jump(bn_add)
|
||||||
bn_add_contd5:
|
bn_add_return:
|
||||||
// stack: x, y, kexit_info
|
// stack: x, y, kexit_info
|
||||||
DUP2 %eq_const(@U256_MAX) // bn_add returns (U256_MAX, U256_MAX) on bad input.
|
DUP2 %eq_const(@U256_MAX) // bn_add returns (U256_MAX, U256_MAX) on bad input.
|
||||||
DUP2 %eq_const(@U256_MAX) // bn_add returns (U256_MAX, U256_MAX) on bad input.
|
DUP2 %eq_const(@U256_MAX) // bn_add returns (U256_MAX, U256_MAX) on bad input.
|
||||||
|
|||||||
@ -11,21 +11,25 @@ global precompile_bn_mul:
|
|||||||
%charge_gas_const(@BN_MUL_GAS)
|
%charge_gas_const(@BN_MUL_GAS)
|
||||||
|
|
||||||
// Load x, y, n from the call data using `mload_packing`.
|
// Load x, y, n from the call data using `mload_packing`.
|
||||||
|
PUSH bn_mul_return
|
||||||
|
// stack: bn_mul_return, kexit_info
|
||||||
|
%stack () -> (@SEGMENT_CALLDATA, 64, 32)
|
||||||
GET_CONTEXT
|
GET_CONTEXT
|
||||||
%stack (ctx, kexit_info) -> (ctx, @SEGMENT_CALLDATA, 64, 32, bn_mul_contd, kexit_info)
|
// stack: ctx, @SEGMENT_CALLDATA, 64, 32, bn_mul_return, kexit_info
|
||||||
%jump(mload_packing)
|
%mload_packing
|
||||||
bn_mul_contd:
|
// stack: n, bn_mul_return, kexit_info
|
||||||
|
%stack () -> (@SEGMENT_CALLDATA, 32, 32)
|
||||||
GET_CONTEXT
|
GET_CONTEXT
|
||||||
%stack (ctx, n, kexit_info) -> (ctx, @SEGMENT_CALLDATA, 32, 32, bn_mul_contd2, n, kexit_info)
|
// stack: ctx, @SEGMENT_CALLDATA, 32, 32, n, bn_mul_return, kexit_info
|
||||||
%jump(mload_packing)
|
%mload_packing
|
||||||
bn_mul_contd2:
|
// stack: y, n, bn_mul_return, kexit_info
|
||||||
|
%stack () -> (@SEGMENT_CALLDATA, 0, 32)
|
||||||
GET_CONTEXT
|
GET_CONTEXT
|
||||||
%stack (ctx, y, n, kexit_info) -> (ctx, @SEGMENT_CALLDATA, 0, 32, bn_mul_contd3, y, n, kexit_info)
|
// stack: ctx, @SEGMENT_CALLDATA, 0, 32, y, n, bn_mul_return, kexit_info
|
||||||
%jump(mload_packing)
|
%mload_packing
|
||||||
bn_mul_contd3:
|
// stack: x, y, n, bn_mul_return, kexit_info
|
||||||
%stack (x, y, n, kexit_info) -> (x, y, n, bn_mul_contd4, kexit_info)
|
|
||||||
%jump(bn_mul)
|
%jump(bn_mul)
|
||||||
bn_mul_contd4:
|
bn_mul_return:
|
||||||
// stack: Px, Py, kexit_info
|
// stack: Px, Py, kexit_info
|
||||||
DUP2 %eq_const(@U256_MAX) // bn_mul returns (U256_MAX, U256_MAX) on bad input.
|
DUP2 %eq_const(@U256_MAX) // bn_mul returns (U256_MAX, U256_MAX) on bad input.
|
||||||
DUP2 %eq_const(@U256_MAX) // bn_mul returns (U256_MAX, U256_MAX) on bad input.
|
DUP2 %eq_const(@U256_MAX) // bn_mul returns (U256_MAX, U256_MAX) on bad input.
|
||||||
|
|||||||
@ -11,25 +11,30 @@ global precompile_ecrec:
|
|||||||
%charge_gas_const(@ECREC_GAS)
|
%charge_gas_const(@ECREC_GAS)
|
||||||
|
|
||||||
// Load hash, v, r, s from the call data using `mload_packing`.
|
// Load hash, v, r, s from the call data using `mload_packing`.
|
||||||
|
PUSH ecrec_return
|
||||||
|
// stack: ecrec_return, kexit_info
|
||||||
|
%stack () -> (@SEGMENT_CALLDATA, 96, 32)
|
||||||
GET_CONTEXT
|
GET_CONTEXT
|
||||||
%stack (ctx, kexit_info) -> (ctx, @SEGMENT_CALLDATA, 96, 32, ecrec_contd, kexit_info)
|
// stack: ctx, @SEGMENT_CALLDATA, 96, 32, ecrec_return, kexit_info
|
||||||
%jump(mload_packing)
|
%mload_packing
|
||||||
ecrec_contd:
|
// stack: s, ecrec_return, kexit_info
|
||||||
|
%stack () -> (@SEGMENT_CALLDATA, 64, 32)
|
||||||
GET_CONTEXT
|
GET_CONTEXT
|
||||||
%stack (ctx, s, kexit_info) -> (ctx, @SEGMENT_CALLDATA, 64, 32, ecrec_contd2, s, kexit_info)
|
// stack: ctx, @SEGMENT_CALLDATA, 64, 32, s, ecrec_return, kexit_info
|
||||||
%jump(mload_packing)
|
%mload_packing
|
||||||
ecrec_contd2:
|
// stack: r, s, ecrec_return, kexit_info
|
||||||
|
%stack () -> (@SEGMENT_CALLDATA, 32, 32)
|
||||||
GET_CONTEXT
|
GET_CONTEXT
|
||||||
%stack (ctx, r, s, kexit_info) -> (ctx, @SEGMENT_CALLDATA, 32, 32, ecrec_contd3, r, s, kexit_info)
|
// stack: ctx, @SEGMENT_CALLDATA, 32, 32, r, s, ecrec_return, kexit_info
|
||||||
%jump(mload_packing)
|
%mload_packing
|
||||||
ecrec_contd3:
|
// stack: v, r, s, ecrec_return, kexit_info
|
||||||
|
%stack () -> (@SEGMENT_CALLDATA, 0, 32)
|
||||||
GET_CONTEXT
|
GET_CONTEXT
|
||||||
%stack (ctx, v, r, s, kexit_info) -> (ctx, @SEGMENT_CALLDATA, 0, 32, ecrec_contd4, v, r, s, kexit_info)
|
// stack: ctx, @SEGMENT_CALLDATA, 0, 32, v, r, s, ecrec_return, kexit_info
|
||||||
%jump(mload_packing)
|
%mload_packing
|
||||||
ecrec_contd4:
|
// stack: hash, v, r, s, ecrec_return, kexit_info
|
||||||
%stack (hash, v, r, s, kexit_info) -> (hash, v, r, s, ecrec_contd5, kexit_info)
|
|
||||||
%jump(ecrecover)
|
%jump(ecrecover)
|
||||||
ecrec_contd5:
|
ecrec_return:
|
||||||
// stack: address, kexit_info
|
// stack: address, kexit_info
|
||||||
DUP1 %eq_const(@U256_MAX) %jumpi(ecrec_bad_input) // ecrecover returns U256_MAX on bad input.
|
DUP1 %eq_const(@U256_MAX) %jumpi(ecrec_bad_input) // ecrecover returns U256_MAX on bad input.
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user