Skip to content
Open
Show file tree
Hide file tree
Changes from 85 commits
Commits
Show all changes
93 commits
Select commit Hold shift + click to select a range
14ea8e3
Add qm31 type
DiegoCivi Oct 18, 2025
825225e
Begin with libfuncs
DiegoCivi Oct 18, 2025
74b2797
Fix bits in type
DiegoCivi Oct 18, 2025
af9f37b
Add pack libfunc
DiegoCivi Oct 19, 2025
f6a0c9f
Add unpack libfunc
DiegoCivi Oct 19, 2025
3b4340f
Add const libfunc
DiegoCivi Oct 19, 2025
a6e9dd4
Add tests
DiegoCivi Oct 20, 2025
e7b3850
Implement QM31 cases for TypeBuilder methods
DiegoCivi Oct 20, 2025
9d7f395
Implement from_ptr for QM31
DiegoCivi Oct 20, 2025
e9a1335
Add comments
DiegoCivi Oct 20, 2025
afa4a4f
Fix const libfunc and add test
DiegoCivi Oct 20, 2025
8a1c16e
Merge branch 'main' into qm31-libfuncs
DiegoCivi Oct 20, 2025
61db908
Add is_zero libfunc
DiegoCivi Oct 20, 2025
4ada9d7
Merge branch 'qm31-libfuncs' of github.com:lambdaclass/cairo_native i…
DiegoCivi Oct 20, 2025
7a9b3d7
Fix test imports
DiegoCivi Oct 20, 2025
fd1a8a0
Implement to_bytes for qm31
DiegoCivi Oct 21, 2025
ce05b18
Begin runtime implementation of QM31 add
DiegoCivi Oct 21, 2025
2af7a8e
Bump types-rs
DiegoCivi Oct 21, 2025
8f0eda8
Implement QM31 add libfunc on runtime
DiegoCivi Oct 21, 2025
844c623
Implement QM31 sub on runtime
DiegoCivi Oct 21, 2025
08087bd
Move pack implementation to runtime
DiegoCivi Oct 21, 2025
ba78b1f
Stop filtering bit
DiegoCivi Oct 21, 2025
a130923
Add test case for QM31 pack
DiegoCivi Oct 21, 2025
8c302fd
Implement QM31 mul libfunc on runtime
DiegoCivi Oct 21, 2025
1d86a02
Implement QM31 div libfunc on runtime
DiegoCivi Oct 21, 2025
bcfbe4b
Move QM31 is_zero libfunc to runtime
DiegoCivi Oct 22, 2025
9321093
Fix test from div libfunc
DiegoCivi Oct 22, 2025
8b72c71
Add safety comment
DiegoCivi Oct 22, 2025
7d302a8
Implement QM31 from_m31 libfunc on runtime
DiegoCivi Oct 22, 2025
73847b0
Add tests with big coefficients
DiegoCivi Oct 22, 2025
6f070ae
Remove repeated code from binary_op libfunc
DiegoCivi Oct 22, 2025
f0b6d56
Unify runtime functions for binary ops
DiegoCivi Oct 22, 2025
5f5687a
Merge branch 'main' into qm31-libfuncs
DiegoCivi Oct 22, 2025
a54d257
Revert "Move pack implementation to runtime"
DiegoCivi Oct 23, 2025
d86684b
Refactor tests
DiegoCivi Oct 23, 2025
2ec1830
Allow many arguments
DiegoCivi Oct 23, 2025
d13b8b7
Remove TODOs
DiegoCivi Oct 23, 2025
0b9ac9d
Fix clippy
DiegoCivi Oct 23, 2025
b8e234b
Merge branch 'qm31-libfuncs' of github.com:lambdaclass/cairo_native i…
DiegoCivi Oct 23, 2025
760d5fd
Bump types-rs to 0.2.4
DiegoCivi Oct 23, 2025
78c2bbb
Add some docs
DiegoCivi Oct 23, 2025
5575223
Refactor match of bin_op libfunc
DiegoCivi Oct 27, 2025
28828c5
Refactor of from_ptr for qm31
DiegoCivi Oct 27, 2025
611fd6a
Refactor of binary operations libfunc
DiegoCivi Oct 27, 2025
00d8eb9
Do allocations on entry
DiegoCivi Oct 27, 2025
c5bb477
Use 32 bits for m31 instead of 31
DiegoCivi Oct 27, 2025
108e2b3
Add more docu
DiegoCivi Oct 27, 2025
a9669fd
Multiple runtime funcs for bin ops
DiegoCivi Oct 28, 2025
868918c
Revert "Use 32 bits for m31 instead of 31"
DiegoCivi Oct 28, 2025
690e9cc
Refactor of runtime for binary op
DiegoCivi Oct 28, 2025
3cd1ff4
Use array instead of struct
DiegoCivi Oct 28, 2025
9846975
Remove debug print
DiegoCivi Oct 28, 2025
798033b
Move from_m31 libfunc to mlir
DiegoCivi Oct 28, 2025
8fa7638
Move is_zero libfunc to mlir
DiegoCivi Oct 28, 2025
1ea5f87
Revert "Move is_zero libfunc to mlir"
DiegoCivi Oct 28, 2025
1375c60
Use raw build for qm31
DiegoCivi Oct 28, 2025
8564423
Fix clippy
DiegoCivi Oct 28, 2025
78fd6a0
Fix from_m31
DiegoCivi Oct 28, 2025
22a81fd
Revert "Revert "Move is_zero libfunc to mlir""
DiegoCivi Oct 29, 2025
b91ccb5
Use as_representative
DiegoCivi Oct 29, 2025
8096265
Fix clippy
DiegoCivi Oct 29, 2025
79f5716
Refactor of to_representative_coefficients()
DiegoCivi Oct 29, 2025
2e551c4
Use insert_values()
DiegoCivi Oct 29, 2025
c381ec0
Add m31_prime edge case tests
DiegoCivi Oct 29, 2025
173a1f1
Fix TypeBuilder and parse_result()
DiegoCivi Oct 29, 2025
a19285a
Fix clippy
DiegoCivi Oct 29, 2025
14a2ba6
Fix x86 segfault
DiegoCivi Oct 30, 2025
470c2c3
Update src/libfuncs/qm31.rs
DiegoCivi Oct 30, 2025
ece346a
Update src/libfuncs/qm31.rs
DiegoCivi Oct 30, 2025
8a7fcda
Update src/libfuncs/qm31.rs
DiegoCivi Oct 30, 2025
7030a3c
Update src/libfuncs/qm31.rs
DiegoCivi Oct 30, 2025
fd149db
Fix parse_result implementation
DiegoCivi Oct 30, 2025
15b85f2
Merge branch 'qm31-libfuncs' of github.com:lambdaclass/cairo_native i…
DiegoCivi Oct 30, 2025
daccb07
Add comments
DiegoCivi Oct 30, 2025
c41ad6f
Refactor of bin op libfunc
DiegoCivi Oct 30, 2025
5a1489e
Fix clippy
DiegoCivi Oct 30, 2025
b7b0bd0
Comments
DiegoCivi Nov 2, 2025
da3ed95
Use expect
DiegoCivi Nov 2, 2025
62593b4
Implement to_bytes
DiegoCivi Nov 2, 2025
8504fa7
Refactor tests
DiegoCivi Nov 2, 2025
714a33c
Update corelib patch
DiegoCivi Nov 3, 2025
d6d8ff8
Implement m31 libfuncs
DiegoCivi Nov 3, 2025
d62463f
Fix m31 add and add tests for m31 libfuncs
DiegoCivi Nov 4, 2025
9cfb633
Add docu
DiegoCivi Nov 4, 2025
d12910d
Simple changes
DiegoCivi Nov 4, 2025
b030f5e
Remove unnecessary extui in m31_sub
DiegoCivi Nov 4, 2025
40c8a43
Minor changes
DiegoCivi Nov 4, 2025
3a2bcaa
Use 31 bits instead of 64 in m31 egcd
DiegoCivi Nov 5, 2025
3b165de
Merge branch 'main' into qm31-libfuncs
gabrielbosio Nov 5, 2025
d7454bf
Apply suggestions from code review
DiegoCivi Nov 6, 2025
410c29a
Merge branch 'qm31-libfuncs' of github.com:lambdaclass/cairo_native i…
DiegoCivi Nov 6, 2025
cf81a58
Build qm31 type with registry
DiegoCivi Nov 6, 2025
6b5e32e
Fix comments
DiegoCivi Nov 10, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 24 additions & 25 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 3 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ criterion = "0.5.1"
itertools = "0.14.0"
k256 = "0.13.4"
keccak = "0.1.5"
lambdaworks-math = "0.11.0"
lambdaworks-math = "0.13.0"
lazy_static = "1.5"
libc = "0.2"
libloading = "0.8.6"
Expand All @@ -78,7 +78,7 @@ sierra-emu = { path = "debug_utils/sierra-emu", version = "0.7.1" }
smallvec = "1.13.2"
starknet-crypto = "0.8.1"
starknet-curve = "0.6.0"
starknet-types-core = "0.2.0"
starknet-types-core = { version = "0.2.4", features = ["hash"]}
stats_alloc = "0.1.10"
tempfile = "3.15.0"
test-case = "3.3"
Expand Down Expand Up @@ -168,6 +168,7 @@ sha2.workspace = true
# Runtime library dependencies.
rand.workspace = true
starknet-curve.workspace = true
lambdaworks-math.workspace = true

[dev-dependencies]
cairo-lang-compiler.workspace = true
Expand Down
6 changes: 6 additions & 0 deletions binaries/cairo-native-bin-utils/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,12 @@ fn jitvalue_to_felt(value: &Value) -> Vec<Felt> {
Value::EcState(a, b, c, d) => {
vec![*a, *b, *c, *d]
}
Value::QM31(a, b, c, d) => vec![
Felt::from(*a),
Felt::from(*b),
Felt::from(*c),
Felt::from(*d),
],
Value::Secp256K1Point(Secp256k1Point {
x,
y,
Expand Down
17 changes: 0 additions & 17 deletions corelib.patch
Original file line number Diff line number Diff line change
Expand Up @@ -1044,20 +1044,3 @@ diff --color=auto -crN cairo2/corelib/src/test.cairo cairo2/corelib_1/src/test.c
mod hash_test;
mod integer_test;
mod iter_test;
***************
*** 24,30 ****
mod option_test;
mod plugins_test;
mod print_test;
! mod qm31_test;
mod range_test;
mod result_test;
mod secp256k1_test;
--- 24,30 ----
mod option_test;
mod plugins_test;
mod print_test;
! // mod qm31_test;
mod range_test;
mod result_test;
mod secp256k1_test;
6 changes: 6 additions & 0 deletions src/arch.rs
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,12 @@ impl AbiArgument for ValueWithInfoWrapper<'_> {
x0.to_bytes(buffer, find_dict_drop_override)?;
y0.to_bytes(buffer, find_dict_drop_override)?;
}
(Value::QM31(a, b, c, d), CoreTypeConcrete::QM31(_)) => {
a.to_bytes(buffer, find_dict_drop_override)?;
b.to_bytes(buffer, find_dict_drop_override)?;
c.to_bytes(buffer, find_dict_drop_override)?;
d.to_bytes(buffer, find_dict_drop_override)?;
}
(Value::Enum { tag, value, .. }, CoreTypeConcrete::Enum(info)) => {
if self.info.is_memory_allocated(self.registry)? {
let abi_ptr = self.value.to_ptr(
Expand Down
19 changes: 18 additions & 1 deletion src/executor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -433,6 +433,24 @@ fn parse_result(
registry,
true,
)?),
CoreTypeConcrete::QM31(_) => match return_ptr {
Some(ptr) => Ok(Value::from_ptr(ptr, type_id, registry, true)?),
None => {
#[cfg(target_arch = "x86_64")]
// Since x86_64's return values hold at most two different 64bit registers,
// everything bigger than u128 will be returned by memory, therefore making
// this branch is unreachable on that architecture.
return Err(Error::ParseAttributeError);

#[cfg(target_arch = "aarch64")]
Ok(Value::QM31(
u32::try_from(ret_registers[0])?,
u32::try_from(ret_registers[1])?,
u32::try_from(ret_registers[2])?,
u32::try_from(ret_registers[3])?,
))
}
},
CoreTypeConcrete::Felt252(_)
| CoreTypeConcrete::Starknet(
StarknetTypeConcrete::ClassHash(_)
Expand Down Expand Up @@ -675,7 +693,6 @@ fn parse_result(
// 2.11.1
CoreTypeConcrete::Blake(_) => native_panic!("blake not yet implemented as results"),
// 2.12.0
CoreTypeConcrete::QM31(_) => native_panic!("qm31 not yet implemented as results"),
CoreTypeConcrete::GasReserve(_) => {
native_panic!("gas reserve not yet implemented as results")
}
Expand Down
5 changes: 4 additions & 1 deletion src/libfuncs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ mod mem;
mod nullable;
mod pedersen;
mod poseidon;
mod qm31;
mod starknet;
mod r#struct;
mod uint256;
Expand Down Expand Up @@ -255,7 +256,9 @@ impl LibfuncBuilder for CoreConcreteLibfunc {
metadata,
&info.signature.param_signatures,
),
Self::QM31(_) => native_panic!("Implement QM31 libfunc"),
Self::QM31(selector) => self::qm31::build(
context, registry, entry, location, helper, metadata, selector,
),
Self::UnsafePanic(_) => native_panic!("Implement unsafe_panic libfunc"),
Self::GasReserve(_) => native_panic!("Implement gas_reserve libfunc"),
Self::DummyFunctionCall(_) => native_panic!("Implement dummy_function_call libfunc"),
Expand Down
Loading
Loading