@@ -93,6 +93,18 @@ pub struct BuiltinCosts {
9393 // bitwise
9494 integer_to_byte_string : ThreeArgumentsCosting ,
9595 byte_string_to_integer : TwoArgumentsCosting ,
96+ and_byte_string : ThreeArgumentsCosting ,
97+ or_byte_string : ThreeArgumentsCosting ,
98+ xor_byte_string : ThreeArgumentsCosting ,
99+ complement_byte_string : OneArgumentCosting ,
100+ read_bit : TwoArgumentsCosting ,
101+ write_bits : ThreeArgumentsCosting ,
102+ replicate_byte : TwoArgumentsCosting ,
103+ shift_byte_string : TwoArgumentsCosting ,
104+ rotate_byte_string : TwoArgumentsCosting ,
105+ count_set_bits : OneArgumentCosting ,
106+ find_first_set_bit : OneArgumentCosting ,
107+ ripemd_160 : OneArgumentCosting ,
96108}
97109
98110impl Default for BuiltinCosts {
@@ -568,6 +580,87 @@ impl BuiltinCosts {
568580 )
569581 }
570582
583+ pub fn and_byte_string ( & self , args : [ i64 ; 3 ] ) -> ExBudget {
584+ ExBudget :: new (
585+ self . and_byte_string . mem . cost ( args) ,
586+ self . and_byte_string . cpu . cost ( args) ,
587+ )
588+ }
589+
590+ pub fn or_byte_string ( & self , args : [ i64 ; 3 ] ) -> ExBudget {
591+ ExBudget :: new (
592+ self . or_byte_string . mem . cost ( args) ,
593+ self . or_byte_string . cpu . cost ( args) ,
594+ )
595+ }
596+
597+ pub fn xor_byte_string ( & self , args : [ i64 ; 3 ] ) -> ExBudget {
598+ ExBudget :: new (
599+ self . xor_byte_string . mem . cost ( args) ,
600+ self . xor_byte_string . cpu . cost ( args) ,
601+ )
602+ }
603+
604+ pub fn complement_byte_string ( & self , args : [ i64 ; 1 ] ) -> ExBudget {
605+ ExBudget :: new (
606+ self . complement_byte_string . mem . cost ( args) ,
607+ self . complement_byte_string . cpu . cost ( args) ,
608+ )
609+ }
610+
611+ pub fn read_bit ( & self , args : [ i64 ; 2 ] ) -> ExBudget {
612+ ExBudget :: new ( self . read_bit . mem . cost ( args) , self . read_bit . cpu . cost ( args) )
613+ }
614+
615+ pub fn write_bits ( & self , args : [ i64 ; 3 ] ) -> ExBudget {
616+ ExBudget :: new (
617+ self . write_bits . mem . cost ( args) ,
618+ self . write_bits . cpu . cost ( args) ,
619+ )
620+ }
621+
622+ pub fn replicate_byte ( & self , args : [ i64 ; 2 ] ) -> ExBudget {
623+ ExBudget :: new (
624+ self . replicate_byte . mem . cost ( args) ,
625+ self . replicate_byte . cpu . cost ( args) ,
626+ )
627+ }
628+
629+ pub fn shift_byte_string ( & self , args : [ i64 ; 2 ] ) -> ExBudget {
630+ ExBudget :: new (
631+ self . shift_byte_string . mem . cost ( args) ,
632+ self . shift_byte_string . cpu . cost ( args) ,
633+ )
634+ }
635+
636+ pub fn rotate_byte_string ( & self , args : [ i64 ; 2 ] ) -> ExBudget {
637+ ExBudget :: new (
638+ self . rotate_byte_string . mem . cost ( args) ,
639+ self . rotate_byte_string . cpu . cost ( args) ,
640+ )
641+ }
642+
643+ pub fn count_set_bits ( & self , args : [ i64 ; 1 ] ) -> ExBudget {
644+ ExBudget :: new (
645+ self . count_set_bits . mem . cost ( args) ,
646+ self . count_set_bits . cpu . cost ( args) ,
647+ )
648+ }
649+
650+ pub fn find_first_set_bit ( & self , args : [ i64 ; 1 ] ) -> ExBudget {
651+ ExBudget :: new (
652+ self . find_first_set_bit . mem . cost ( args) ,
653+ self . find_first_set_bit . cpu . cost ( args) ,
654+ )
655+ }
656+
657+ pub fn ripemd_160 ( & self , args : [ i64 ; 1 ] ) -> ExBudget {
658+ ExBudget :: new (
659+ self . ripemd_160 . mem . cost ( args) ,
660+ self . ripemd_160 . cpu . cost ( args) ,
661+ )
662+ }
663+
571664 pub fn v3 ( ) -> Self {
572665 Self {
573666 add_integer : TwoArgumentsCosting :: new (
@@ -880,6 +973,54 @@ impl BuiltinCosts {
880973 TwoArgumentsCosting :: linear_in_y ( 0 , 1 ) ,
881974 TwoArgumentsCosting :: quadratic_in_y ( 1006041 , 43623 , 251 ) ,
882975 ) ,
976+ and_byte_string : ThreeArgumentsCosting :: new (
977+ ThreeArgumentsCosting :: linear_in_max_y_z ( 0 , 1 ) ,
978+ ThreeArgumentsCosting :: linear_in_y_and_z ( 100181 , 726 , 719 ) ,
979+ ) ,
980+ or_byte_string : ThreeArgumentsCosting :: new (
981+ ThreeArgumentsCosting :: linear_in_max_y_z ( 0 , 1 ) ,
982+ ThreeArgumentsCosting :: linear_in_y_and_z ( 100181 , 726 , 719 ) ,
983+ ) ,
984+ xor_byte_string : ThreeArgumentsCosting :: new (
985+ ThreeArgumentsCosting :: linear_in_max_y_z ( 0 , 1 ) ,
986+ ThreeArgumentsCosting :: linear_in_y_and_z ( 100181 , 726 , 719 ) ,
987+ ) ,
988+ complement_byte_string : OneArgumentCosting :: new (
989+ OneArgumentCosting :: linear_cost ( 0 , 1 ) ,
990+ OneArgumentCosting :: linear_cost ( 107878 , 680 ) ,
991+ ) ,
992+ read_bit : TwoArgumentsCosting :: new (
993+ TwoArgumentsCosting :: constant_cost ( 1 ) ,
994+ TwoArgumentsCosting :: constant_cost ( 95336 ) ,
995+ ) ,
996+ write_bits : ThreeArgumentsCosting :: new (
997+ ThreeArgumentsCosting :: linear_in_x ( 0 , 1 ) ,
998+ ThreeArgumentsCosting :: linear_in_y ( 281145 , 18848 ) ,
999+ ) ,
1000+ replicate_byte : TwoArgumentsCosting :: new (
1001+ TwoArgumentsCosting :: linear_in_x ( 1 , 1 ) ,
1002+ TwoArgumentsCosting :: linear_in_x ( 180194 , 159 ) ,
1003+ ) ,
1004+ shift_byte_string : TwoArgumentsCosting :: new (
1005+ TwoArgumentsCosting :: linear_in_x ( 0 , 1 ) ,
1006+ TwoArgumentsCosting :: linear_in_x ( 158519 , 8942 ) ,
1007+ ) ,
1008+ rotate_byte_string : TwoArgumentsCosting :: new (
1009+ TwoArgumentsCosting :: linear_in_x ( 0 , 1 ) ,
1010+ TwoArgumentsCosting :: linear_in_x ( 159378 , 8813 ) ,
1011+ ) ,
1012+ count_set_bits : OneArgumentCosting :: new (
1013+ OneArgumentCosting :: constant_cost ( 1 ) ,
1014+ OneArgumentCosting :: linear_cost ( 107490 , 3298 ) ,
1015+ ) ,
1016+ find_first_set_bit : OneArgumentCosting :: new (
1017+ OneArgumentCosting :: constant_cost ( 1 ) ,
1018+ OneArgumentCosting :: linear_cost ( 106057 , 655 ) ,
1019+ ) ,
1020+ ripemd_160 : OneArgumentCosting :: new (
1021+ OneArgumentCosting :: constant_cost ( 3 ) ,
1022+ OneArgumentCosting :: linear_cost ( 1964219 , 24520 ) ,
1023+ ) ,
8831024 }
8841025 }
8851026}
0 commit comments