mirror of
https://github.com/logos-storage/plonky2.git
synced 2026-01-04 23:03:08 +00:00
Fp6 mult purely on stack
This commit is contained in:
parent
00534286a6
commit
7b1db48846
@ -54,6 +54,36 @@
|
||||
// stack:
|
||||
%endmacro
|
||||
|
||||
// cost: 49
|
||||
%macro store_fp6_sh(offset)
|
||||
// stack: x0, x1, x2, x3, x4, x5
|
||||
PUSH $offset
|
||||
%add_const(2)
|
||||
%mstore_kernel_general
|
||||
// stack: x1, x2, x3, x4, x5
|
||||
PUSH $offset
|
||||
%add_const(3)
|
||||
%mstore_kernel_general
|
||||
// stack: x2, x3, x4, x5
|
||||
PUSH $offset
|
||||
%add_const(4)
|
||||
%mstore_kernel_general
|
||||
// stack: x3, x4, x5
|
||||
PUSH $offset
|
||||
%add_const(5)
|
||||
%mstore_kernel_general
|
||||
// stack: x4, x5
|
||||
%i9
|
||||
// stack: y5, y4
|
||||
PUSH $offset
|
||||
%add_const(1)
|
||||
%mstore_kernel_general
|
||||
// stack: y4
|
||||
PUSH $offset
|
||||
%mstore_kernel_general
|
||||
// stack:
|
||||
%endmacro
|
||||
|
||||
// cost: 6
|
||||
%macro dup1_fp6
|
||||
// stack: F: 6
|
||||
@ -160,142 +190,147 @@
|
||||
%endmacro
|
||||
|
||||
%macro mul_Fp6
|
||||
DUP3
|
||||
DUP11
|
||||
MUL
|
||||
DUP2
|
||||
DUP14
|
||||
MUL
|
||||
SUB
|
||||
DUP12
|
||||
DUP8
|
||||
MUL
|
||||
DUP9
|
||||
DUP5
|
||||
MUL
|
||||
ADD
|
||||
DUP7
|
||||
DUP7
|
||||
MUL
|
||||
DUP12
|
||||
DUP12
|
||||
MUL
|
||||
ADD
|
||||
SUB
|
||||
DUP7
|
||||
DUP5
|
||||
MUL
|
||||
DUP10
|
||||
DUP8
|
||||
MUL
|
||||
ADD
|
||||
DUP12
|
||||
DUP10
|
||||
MUL
|
||||
ADD
|
||||
DUP14
|
||||
DUP12
|
||||
MUL
|
||||
ADD
|
||||
DUP15
|
||||
DUP7
|
||||
MUL
|
||||
DUP14
|
||||
DUP6
|
||||
MUL
|
||||
ADD
|
||||
DUP2
|
||||
DUP4
|
||||
PUSH 9
|
||||
MUL
|
||||
SUB
|
||||
ADD
|
||||
%mstore_kernel_general(0)
|
||||
PUSH 9
|
||||
MUL
|
||||
ADD
|
||||
ADD
|
||||
%mstore_kernel_general(1)
|
||||
DUP4
|
||||
DUP12
|
||||
MUL
|
||||
DUP5
|
||||
DUP5
|
||||
MUL
|
||||
SUB
|
||||
DUP3
|
||||
DUP11
|
||||
DUP10
|
||||
MUL
|
||||
DUP14
|
||||
DUP8
|
||||
MUL
|
||||
ADD
|
||||
DUP3
|
||||
DUP11
|
||||
DUP10
|
||||
MUL
|
||||
DUP13
|
||||
MUL
|
||||
DUP6
|
||||
DUP12
|
||||
MUL
|
||||
SUB
|
||||
DUP12
|
||||
DUP10
|
||||
MUL
|
||||
DUP9
|
||||
DUP7
|
||||
DUP5
|
||||
MUL
|
||||
ADD
|
||||
DUP2
|
||||
DUP4
|
||||
PUSH 9
|
||||
SUB
|
||||
DUP11
|
||||
DUP8
|
||||
MUL
|
||||
DUP15
|
||||
DUP11
|
||||
MUL
|
||||
ADD
|
||||
DUP13
|
||||
DUP12
|
||||
MUL
|
||||
ADD
|
||||
DUP5
|
||||
DUP5
|
||||
MUL
|
||||
ADD
|
||||
DUP6
|
||||
DUP10
|
||||
MUL
|
||||
SUB
|
||||
SUB
|
||||
DUP15
|
||||
DUP9
|
||||
MUL
|
||||
DUP12
|
||||
DUP6
|
||||
ADD
|
||||
DUP2
|
||||
DUP4
|
||||
PUSH 9
|
||||
MUL
|
||||
SUB
|
||||
ADD
|
||||
ADD
|
||||
%mstore_kernel_general(2)
|
||||
SWAP15
|
||||
SWAP3
|
||||
SWAP2
|
||||
SWAP1
|
||||
PUSH 9
|
||||
MUL
|
||||
ADD
|
||||
DUP13
|
||||
ADD
|
||||
SWAP9
|
||||
DUP9
|
||||
DUP5
|
||||
MUL
|
||||
DUP12
|
||||
DUP8
|
||||
DUP14
|
||||
MUL
|
||||
ADD
|
||||
DUP10
|
||||
DUP8
|
||||
DUP6
|
||||
MUL
|
||||
DUP11
|
||||
DUP15
|
||||
MUL
|
||||
SUB
|
||||
DUP15
|
||||
DUP5
|
||||
MUL
|
||||
DUP4
|
||||
DUP12
|
||||
MUL
|
||||
ADD
|
||||
DUP2
|
||||
DUP4
|
||||
PUSH 9
|
||||
MUL
|
||||
SUB
|
||||
SUB
|
||||
DUP8
|
||||
DUP15
|
||||
MUL
|
||||
DUP7
|
||||
DUP11
|
||||
MUL
|
||||
ADD
|
||||
ADD
|
||||
SWAP13
|
||||
SWAP2
|
||||
SWAP1
|
||||
PUSH 9
|
||||
MUL
|
||||
ADD
|
||||
DUP7
|
||||
DUP5
|
||||
MUL
|
||||
DUP16
|
||||
DUP4
|
||||
MUL
|
||||
ADD
|
||||
DUP6
|
||||
DUP12
|
||||
MUL
|
||||
ADD
|
||||
DUP4
|
||||
DUP10
|
||||
MUL
|
||||
ADD
|
||||
ADD
|
||||
SWAP13
|
||||
DUP15
|
||||
DUP7
|
||||
MUL
|
||||
DUP4
|
||||
DUP6
|
||||
MUL
|
||||
ADD
|
||||
%mstore_kernel_general(3)
|
||||
DUP10
|
||||
DUP12
|
||||
MUL
|
||||
DUP7
|
||||
DUP9
|
||||
MUL
|
||||
ADD
|
||||
DUP8
|
||||
DUP3
|
||||
MUL
|
||||
DUP7
|
||||
DUP5
|
||||
MUL
|
||||
ADD
|
||||
DUP13
|
||||
DUP11
|
||||
MUL
|
||||
DUP10
|
||||
DUP8
|
||||
MUL
|
||||
ADD
|
||||
DUP6
|
||||
DUP4
|
||||
MUL
|
||||
ADD
|
||||
SUB
|
||||
%mstore_kernel_general(4)
|
||||
SWAP15
|
||||
MUL
|
||||
SWAP2
|
||||
MUL
|
||||
@ -312,5 +347,21 @@
|
||||
SWAP2
|
||||
MUL
|
||||
ADD
|
||||
%mstore_kernel_general(5)
|
||||
SWAP5
|
||||
%endmacro
|
||||
|
||||
// cost: 9; note this returns y, x for x + yi
|
||||
%macro i9
|
||||
// stack: a , b
|
||||
DUP2
|
||||
DUP2
|
||||
// stack: a , b, a , b
|
||||
%mul_const(9)
|
||||
SUB
|
||||
// stack: 9a - b, a , b
|
||||
SWAP2
|
||||
// stack: b , a, 9a - b
|
||||
%mul_const(9)
|
||||
ADD
|
||||
// stack: 9b + a, 9a - b
|
||||
%endmacro
|
||||
|
||||
@ -214,9 +214,12 @@ impl<'a> Interpreter<'a> {
|
||||
self.incr(1);
|
||||
match opcode {
|
||||
0x00 => self.run_stop(), // "STOP",
|
||||
0x01 => self.run_add(), // "ADD",
|
||||
0x02 => self.run_mul(), // "MUL",
|
||||
0x03 => self.run_sub(), // "SUB",
|
||||
// 0x01 => self.run_add(), // "ADD",
|
||||
// 0x02 => self.run_mul(), // "MUL",
|
||||
// 0x03 => self.run_sub(), // "SUB",
|
||||
0x01 => self.run_add_p(), // "ADD",
|
||||
0x02 => self.run_mul_p(), // "MUL",
|
||||
0x03 => self.run_sub_p(), // "SUB",
|
||||
0x04 => self.run_div(), // "DIV",
|
||||
0x05 => todo!(), // "SDIV",
|
||||
0x06 => self.run_mod(), // "MOD",
|
||||
@ -322,18 +325,36 @@ impl<'a> Interpreter<'a> {
|
||||
self.push(x.overflowing_add(y).0);
|
||||
}
|
||||
|
||||
fn run_add_p(&mut self) {
|
||||
let x = self.pop();
|
||||
let y = self.pop();
|
||||
self.push(U256::try_from((x + y) % 101).unwrap());
|
||||
}
|
||||
|
||||
fn run_mul(&mut self) {
|
||||
let x = self.pop();
|
||||
let y = self.pop();
|
||||
self.push(x.overflowing_mul(y).0);
|
||||
}
|
||||
|
||||
fn run_mul_p(&mut self) {
|
||||
let x = self.pop();
|
||||
let y = self.pop();
|
||||
self.push(U256::try_from(x.full_mul(y) % 101).unwrap());
|
||||
}
|
||||
|
||||
fn run_sub(&mut self) {
|
||||
let x = self.pop();
|
||||
let y = self.pop();
|
||||
self.push(x.overflowing_sub(y).0);
|
||||
}
|
||||
|
||||
fn run_sub_p(&mut self) {
|
||||
let x = self.pop();
|
||||
let y = self.pop();
|
||||
self.push(U256::try_from((x - y) % 101).unwrap());
|
||||
}
|
||||
|
||||
fn run_div(&mut self) {
|
||||
let x = self.pop();
|
||||
let y = self.pop();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user