mirror of
https://github.com/logos-storage/plonky2.git
synced 2026-01-02 22:03: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)
|
||||
|
||||
// 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
|
||||
%stack (ctx, kexit_info) -> (ctx, @SEGMENT_CALLDATA, 96, 32, bn_add_contd, kexit_info)
|
||||
%jump(mload_packing)
|
||||
bn_add_contd:
|
||||
// stack: ctx, @SEGMENT_CALLDATA, 96, 32, bn_add_return, kexit_info
|
||||
%mload_packing
|
||||
// stack: y1, bn_add_return, kexit_info
|
||||
%stack () -> (@SEGMENT_CALLDATA, 64, 32)
|
||||
GET_CONTEXT
|
||||
%stack (ctx, y1, kexit_info) -> (ctx, @SEGMENT_CALLDATA, 64, 32, bn_add_contd2, y1, kexit_info)
|
||||
%jump(mload_packing)
|
||||
bn_add_contd2:
|
||||
// stack: ctx, @SEGMENT_CALLDATA, 64, 32, y1, bn_add_return, kexit_info
|
||||
%mload_packing
|
||||
// stack: x1, y1, bn_add_return, kexit_info
|
||||
%stack () -> (@SEGMENT_CALLDATA, 32, 32)
|
||||
GET_CONTEXT
|
||||
%stack (ctx, x1, y1, kexit_info) -> (ctx, @SEGMENT_CALLDATA, 32, 32, bn_add_contd3, x1, y1, kexit_info)
|
||||
%jump(mload_packing)
|
||||
bn_add_contd3:
|
||||
// stack: ctx, @SEGMENT_CALLDATA, 32, 32, x1, y1, bn_add_return, kexit_info
|
||||
%mload_packing
|
||||
// stack: y0, x1, y1, bn_add_return, kexit_info
|
||||
%stack () -> (@SEGMENT_CALLDATA, 0, 32)
|
||||
GET_CONTEXT
|
||||
%stack (ctx, y0, x1, y1, kexit_info) -> (ctx, @SEGMENT_CALLDATA, 0, 32, bn_add_contd4, y0, x1, y1, kexit_info)
|
||||
%jump(mload_packing)
|
||||
bn_add_contd4:
|
||||
%stack (x0, y0, x1, y1, kexit_info) -> (x0, y0, x1, y1, bn_add_contd5, kexit_info)
|
||||
// stack: ctx, @SEGMENT_CALLDATA, 0, 32, y0, x1, y1, bn_add_return, kexit_info
|
||||
%mload_packing
|
||||
// stack: x0, y0, x1, y1, bn_add_return, kexit_info
|
||||
%jump(bn_add)
|
||||
bn_add_contd5:
|
||||
bn_add_return:
|
||||
// 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.
|
||||
|
||||
@ -11,21 +11,25 @@ global precompile_bn_mul:
|
||||
%charge_gas_const(@BN_MUL_GAS)
|
||||
|
||||
// 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
|
||||
%stack (ctx, kexit_info) -> (ctx, @SEGMENT_CALLDATA, 64, 32, bn_mul_contd, kexit_info)
|
||||
%jump(mload_packing)
|
||||
bn_mul_contd:
|
||||
// stack: ctx, @SEGMENT_CALLDATA, 64, 32, bn_mul_return, kexit_info
|
||||
%mload_packing
|
||||
// stack: n, bn_mul_return, kexit_info
|
||||
%stack () -> (@SEGMENT_CALLDATA, 32, 32)
|
||||
GET_CONTEXT
|
||||
%stack (ctx, n, kexit_info) -> (ctx, @SEGMENT_CALLDATA, 32, 32, bn_mul_contd2, n, kexit_info)
|
||||
%jump(mload_packing)
|
||||
bn_mul_contd2:
|
||||
// stack: ctx, @SEGMENT_CALLDATA, 32, 32, n, bn_mul_return, kexit_info
|
||||
%mload_packing
|
||||
// stack: y, n, bn_mul_return, kexit_info
|
||||
%stack () -> (@SEGMENT_CALLDATA, 0, 32)
|
||||
GET_CONTEXT
|
||||
%stack (ctx, y, n, kexit_info) -> (ctx, @SEGMENT_CALLDATA, 0, 32, bn_mul_contd3, y, n, kexit_info)
|
||||
%jump(mload_packing)
|
||||
bn_mul_contd3:
|
||||
%stack (x, y, n, kexit_info) -> (x, y, n, bn_mul_contd4, kexit_info)
|
||||
// stack: ctx, @SEGMENT_CALLDATA, 0, 32, y, n, bn_mul_return, kexit_info
|
||||
%mload_packing
|
||||
// stack: x, y, n, bn_mul_return, kexit_info
|
||||
%jump(bn_mul)
|
||||
bn_mul_contd4:
|
||||
bn_mul_return:
|
||||
// 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.
|
||||
|
||||
@ -11,25 +11,30 @@ global precompile_ecrec:
|
||||
%charge_gas_const(@ECREC_GAS)
|
||||
|
||||
// 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
|
||||
%stack (ctx, kexit_info) -> (ctx, @SEGMENT_CALLDATA, 96, 32, ecrec_contd, kexit_info)
|
||||
%jump(mload_packing)
|
||||
ecrec_contd:
|
||||
// stack: ctx, @SEGMENT_CALLDATA, 96, 32, ecrec_return, kexit_info
|
||||
%mload_packing
|
||||
// stack: s, ecrec_return, kexit_info
|
||||
%stack () -> (@SEGMENT_CALLDATA, 64, 32)
|
||||
GET_CONTEXT
|
||||
%stack (ctx, s, kexit_info) -> (ctx, @SEGMENT_CALLDATA, 64, 32, ecrec_contd2, s, kexit_info)
|
||||
%jump(mload_packing)
|
||||
ecrec_contd2:
|
||||
// stack: ctx, @SEGMENT_CALLDATA, 64, 32, s, ecrec_return, kexit_info
|
||||
%mload_packing
|
||||
// stack: r, s, ecrec_return, kexit_info
|
||||
%stack () -> (@SEGMENT_CALLDATA, 32, 32)
|
||||
GET_CONTEXT
|
||||
%stack (ctx, r, s, kexit_info) -> (ctx, @SEGMENT_CALLDATA, 32, 32, ecrec_contd3, r, s, kexit_info)
|
||||
%jump(mload_packing)
|
||||
ecrec_contd3:
|
||||
// stack: ctx, @SEGMENT_CALLDATA, 32, 32, r, s, ecrec_return, kexit_info
|
||||
%mload_packing
|
||||
// stack: v, r, s, ecrec_return, kexit_info
|
||||
%stack () -> (@SEGMENT_CALLDATA, 0, 32)
|
||||
GET_CONTEXT
|
||||
%stack (ctx, v, r, s, kexit_info) -> (ctx, @SEGMENT_CALLDATA, 0, 32, ecrec_contd4, v, r, s, kexit_info)
|
||||
%jump(mload_packing)
|
||||
ecrec_contd4:
|
||||
%stack (hash, v, r, s, kexit_info) -> (hash, v, r, s, ecrec_contd5, kexit_info)
|
||||
// stack: ctx, @SEGMENT_CALLDATA, 0, 32, v, r, s, ecrec_return, kexit_info
|
||||
%mload_packing
|
||||
// stack: hash, v, r, s, ecrec_return, kexit_info
|
||||
%jump(ecrecover)
|
||||
ecrec_contd5:
|
||||
ecrec_return:
|
||||
// stack: address, kexit_info
|
||||
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