mirror of
https://github.com/logos-storage/plonky2.git
synced 2026-01-06 07:43:10 +00:00
Fp6 mult purely on stack
This commit is contained in:
parent
00534286a6
commit
7b1db48846
@ -54,6 +54,36 @@
|
|||||||
// stack:
|
// stack:
|
||||||
%endmacro
|
%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
|
// cost: 6
|
||||||
%macro dup1_fp6
|
%macro dup1_fp6
|
||||||
// stack: F: 6
|
// stack: F: 6
|
||||||
@ -160,142 +190,147 @@
|
|||||||
%endmacro
|
%endmacro
|
||||||
|
|
||||||
%macro mul_Fp6
|
%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
|
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
|
DUP12
|
||||||
MUL
|
MUL
|
||||||
|
DUP5
|
||||||
|
DUP5
|
||||||
|
MUL
|
||||||
|
SUB
|
||||||
DUP3
|
DUP3
|
||||||
DUP11
|
DUP10
|
||||||
|
MUL
|
||||||
|
DUP14
|
||||||
|
DUP8
|
||||||
MUL
|
MUL
|
||||||
ADD
|
ADD
|
||||||
DUP3
|
DUP11
|
||||||
|
DUP10
|
||||||
|
MUL
|
||||||
DUP13
|
DUP13
|
||||||
MUL
|
DUP5
|
||||||
DUP6
|
|
||||||
DUP12
|
|
||||||
MUL
|
|
||||||
SUB
|
|
||||||
DUP12
|
|
||||||
DUP10
|
|
||||||
MUL
|
|
||||||
DUP9
|
|
||||||
DUP7
|
|
||||||
MUL
|
MUL
|
||||||
ADD
|
ADD
|
||||||
DUP2
|
SUB
|
||||||
DUP4
|
DUP11
|
||||||
PUSH 9
|
DUP8
|
||||||
|
MUL
|
||||||
|
DUP15
|
||||||
|
DUP11
|
||||||
|
MUL
|
||||||
|
ADD
|
||||||
|
DUP13
|
||||||
|
DUP12
|
||||||
|
MUL
|
||||||
|
ADD
|
||||||
|
DUP5
|
||||||
|
DUP5
|
||||||
|
MUL
|
||||||
|
ADD
|
||||||
|
DUP6
|
||||||
|
DUP10
|
||||||
MUL
|
MUL
|
||||||
SUB
|
|
||||||
SUB
|
|
||||||
DUP15
|
DUP15
|
||||||
DUP9
|
DUP9
|
||||||
MUL
|
MUL
|
||||||
DUP12
|
ADD
|
||||||
DUP6
|
DUP2
|
||||||
|
DUP4
|
||||||
|
PUSH 9
|
||||||
MUL
|
MUL
|
||||||
|
SUB
|
||||||
ADD
|
ADD
|
||||||
ADD
|
SWAP15
|
||||||
%mstore_kernel_general(2)
|
SWAP3
|
||||||
|
SWAP2
|
||||||
|
SWAP1
|
||||||
PUSH 9
|
PUSH 9
|
||||||
MUL
|
MUL
|
||||||
ADD
|
ADD
|
||||||
DUP13
|
ADD
|
||||||
|
SWAP9
|
||||||
DUP9
|
DUP9
|
||||||
|
DUP5
|
||||||
MUL
|
MUL
|
||||||
DUP12
|
|
||||||
DUP8
|
DUP8
|
||||||
|
DUP14
|
||||||
MUL
|
MUL
|
||||||
ADD
|
ADD
|
||||||
DUP10
|
DUP8
|
||||||
DUP6
|
DUP6
|
||||||
MUL
|
MUL
|
||||||
|
DUP11
|
||||||
|
DUP15
|
||||||
|
MUL
|
||||||
|
SUB
|
||||||
|
DUP15
|
||||||
|
DUP5
|
||||||
|
MUL
|
||||||
|
DUP4
|
||||||
|
DUP12
|
||||||
|
MUL
|
||||||
ADD
|
ADD
|
||||||
|
DUP2
|
||||||
|
DUP4
|
||||||
|
PUSH 9
|
||||||
|
MUL
|
||||||
|
SUB
|
||||||
|
SUB
|
||||||
DUP8
|
DUP8
|
||||||
|
DUP15
|
||||||
|
MUL
|
||||||
|
DUP7
|
||||||
|
DUP11
|
||||||
|
MUL
|
||||||
|
ADD
|
||||||
|
ADD
|
||||||
|
SWAP13
|
||||||
|
SWAP2
|
||||||
|
SWAP1
|
||||||
|
PUSH 9
|
||||||
|
MUL
|
||||||
|
ADD
|
||||||
|
DUP7
|
||||||
|
DUP5
|
||||||
|
MUL
|
||||||
|
DUP16
|
||||||
DUP4
|
DUP4
|
||||||
MUL
|
MUL
|
||||||
ADD
|
ADD
|
||||||
|
DUP6
|
||||||
|
DUP12
|
||||||
|
MUL
|
||||||
|
ADD
|
||||||
|
DUP4
|
||||||
|
DUP10
|
||||||
|
MUL
|
||||||
|
ADD
|
||||||
|
ADD
|
||||||
|
SWAP13
|
||||||
|
DUP15
|
||||||
|
DUP7
|
||||||
|
MUL
|
||||||
|
DUP4
|
||||||
|
DUP6
|
||||||
|
MUL
|
||||||
ADD
|
ADD
|
||||||
%mstore_kernel_general(3)
|
|
||||||
DUP10
|
DUP10
|
||||||
DUP12
|
DUP12
|
||||||
MUL
|
MUL
|
||||||
DUP7
|
|
||||||
DUP9
|
|
||||||
MUL
|
|
||||||
ADD
|
ADD
|
||||||
|
DUP8
|
||||||
DUP3
|
DUP3
|
||||||
|
MUL
|
||||||
|
DUP7
|
||||||
DUP5
|
DUP5
|
||||||
MUL
|
MUL
|
||||||
ADD
|
ADD
|
||||||
DUP13
|
DUP13
|
||||||
DUP11
|
DUP11
|
||||||
MUL
|
MUL
|
||||||
DUP10
|
|
||||||
DUP8
|
|
||||||
MUL
|
|
||||||
ADD
|
|
||||||
DUP6
|
|
||||||
DUP4
|
|
||||||
MUL
|
|
||||||
ADD
|
ADD
|
||||||
SUB
|
SUB
|
||||||
%mstore_kernel_general(4)
|
SWAP15
|
||||||
MUL
|
MUL
|
||||||
SWAP2
|
SWAP2
|
||||||
MUL
|
MUL
|
||||||
@ -312,5 +347,21 @@
|
|||||||
SWAP2
|
SWAP2
|
||||||
MUL
|
MUL
|
||||||
ADD
|
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
|
%endmacro
|
||||||
|
|||||||
@ -214,9 +214,12 @@ impl<'a> Interpreter<'a> {
|
|||||||
self.incr(1);
|
self.incr(1);
|
||||||
match opcode {
|
match opcode {
|
||||||
0x00 => self.run_stop(), // "STOP",
|
0x00 => self.run_stop(), // "STOP",
|
||||||
0x01 => self.run_add(), // "ADD",
|
// 0x01 => self.run_add(), // "ADD",
|
||||||
0x02 => self.run_mul(), // "MUL",
|
// 0x02 => self.run_mul(), // "MUL",
|
||||||
0x03 => self.run_sub(), // "SUB",
|
// 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",
|
0x04 => self.run_div(), // "DIV",
|
||||||
0x05 => todo!(), // "SDIV",
|
0x05 => todo!(), // "SDIV",
|
||||||
0x06 => self.run_mod(), // "MOD",
|
0x06 => self.run_mod(), // "MOD",
|
||||||
@ -322,18 +325,36 @@ impl<'a> Interpreter<'a> {
|
|||||||
self.push(x.overflowing_add(y).0);
|
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) {
|
fn run_mul(&mut self) {
|
||||||
let x = self.pop();
|
let x = self.pop();
|
||||||
let y = self.pop();
|
let y = self.pop();
|
||||||
self.push(x.overflowing_mul(y).0);
|
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) {
|
fn run_sub(&mut self) {
|
||||||
let x = self.pop();
|
let x = self.pop();
|
||||||
let y = self.pop();
|
let y = self.pop();
|
||||||
self.push(x.overflowing_sub(y).0);
|
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) {
|
fn run_div(&mut self) {
|
||||||
let x = self.pop();
|
let x = self.pop();
|
||||||
let y = self.pop();
|
let y = self.pop();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user