30
30
#define cryptonight_superfast 12
31
31
#define cryptonight_gpu 13
32
32
#define cryptonight_conceal 14
33
+ #define cryptonight_v8_reversewaltz 17
33
34
34
35
/* For Mesa clover support */
35
36
#ifdef cl_clang_storage_class_specifiers
@@ -639,7 +640,7 @@ __kernel void JOIN(cn0,ALGO)(__global ulong *input, __global uint4 *Scratchpad,
639
640
R "===(
640
641
641
642
// __NV_CL_C_VERSION checks if NVIDIA opencl is used
642
- #if (ALGO == cryptonight_monero_v8 && defined(__NV_CL_C_VERSION ))
643
+ #if (( ALGO == cryptonight_monero_v8 || ALGO == cryptonight_v8_reversewaltz ) && defined(__NV_CL_C_VERSION ))
643
644
# define SCRATCHPAD_CHUNK (N ) (*(__local uint4*)((__local uchar*)(scratchpad_line) + (idxS ^ (N << 4))))
644
645
# define SCRATCHPAD_CHUNK_GLOBAL (*((__global uint16*)(Scratchpad + (IDX((idx0 & 0x1FFFC0U) >> 4)))))
645
646
#else
@@ -659,7 +660,7 @@ __kernel void JOIN(cn1,ALGO) (__global uint4 *Scratchpad, __global ulong *states
659
660
float4 conc_var = (float4 )(0.0f );
660
661
#endif
661
662
662
- #if (ALGO == cryptonight_monero_v8 )
663
+ #if (ALGO == cryptonight_monero_v8 || ALGO == cryptonight_v8_reversewaltz )
663
664
ulong b [4 ];
664
665
uint4 b_x [2 ];
665
666
// NVIDIA
@@ -673,7 +674,7 @@ __kernel void JOIN(cn1,ALGO) (__global uint4 *Scratchpad, __global ulong *states
673
674
#endif
674
675
__local uint AES0 [256 ], AES1 [256 ];
675
676
676
- #if (ALGO == cryptonight_monero_v8 )
677
+ #if (ALGO == cryptonight_monero_v8 || ALGO == cryptonight_v8_reversewaltz )
677
678
# if defined(__clang__ ) && !defined(__NV_CL_C_VERSION )
678
679
__local uint RCP [256 ];
679
680
# endif
@@ -689,7 +690,7 @@ __kernel void JOIN(cn1,ALGO) (__global uint4 *Scratchpad, __global ulong *states
689
690
AES0 [i ] = tmp ;
690
691
AES1 [i ] = rotate (tmp , 8U );
691
692
692
- #if (ALGO == cryptonight_monero_v8 && (defined(__clang__ ) && !defined(__NV_CL_C_VERSION )))
693
+ #if (( ALGO == cryptonight_monero_v8 || ALGO == cryptonight_v8_reversewaltz ) && (defined(__clang__ ) && !defined(__NV_CL_C_VERSION )))
693
694
RCP [i ] = RCP_C [i ];
694
695
#endif
695
696
}
@@ -723,7 +724,7 @@ __kernel void JOIN(cn1,ALGO) (__global uint4 *Scratchpad, __global ulong *states
723
724
724
725
b_x [0 ] = ((uint4 * )b )[0 ];
725
726
726
- #if (ALGO == cryptonight_monero_v8 )
727
+ #if (ALGO == cryptonight_monero_v8 || ALGO == cryptonight_v8_reversewaltz )
727
728
a [1 ] = states [1 ] ^ states [5 ];
728
729
b [2 ] = states [8 ] ^ states [10 ];
729
730
b [3 ] = states [9 ] ^ states [11 ];
@@ -755,7 +756,7 @@ __kernel void JOIN(cn1,ALGO) (__global uint4 *Scratchpad, __global ulong *states
755
756
{
756
757
ulong c [2 ];
757
758
758
- #if (ALGO == cryptonight_monero_v8 && defined(__NV_CL_C_VERSION ))
759
+ #if (( ALGO == cryptonight_monero_v8 || ALGO == cryptonight_v8_reversewaltz ) && defined(__NV_CL_C_VERSION ))
759
760
uint idxS = idx0 & 0x30U ;
760
761
* scratchpad_line = SCRATCHPAD_CHUNK_GLOBAL ;
761
762
#endif
@@ -792,6 +793,15 @@ __kernel void JOIN(cn1,ALGO) (__global uint4 *Scratchpad, __global ulong *states
792
793
SCRATCHPAD_CHUNK (2 ) = as_uint4 (chunk1 + ((ulong2 * )b_x )[0 ]);
793
794
SCRATCHPAD_CHUNK (3 ) = as_uint4 (chunk2 + ((ulong2 * )a )[0 ]);
794
795
}
796
+ #elif (ALGO == cryptonight_v8_reversewaltz )
797
+ {
798
+ ulong2 chunk3 = as_ulong2 (SCRATCHPAD_CHUNK (1 ));
799
+ ulong2 chunk2 = as_ulong2 (SCRATCHPAD_CHUNK (2 ));
800
+ ulong2 chunk1 = as_ulong2 (SCRATCHPAD_CHUNK (3 ));
801
+ SCRATCHPAD_CHUNK (1 ) = as_uint4 (chunk3 + ((ulong2 * )(b_x + 1 ))[0 ]);
802
+ SCRATCHPAD_CHUNK (2 ) = as_uint4 (chunk1 + ((ulong2 * )b_x )[0 ]);
803
+ SCRATCHPAD_CHUNK (3 ) = as_uint4 (chunk2 + ((ulong2 * )a )[0 ]);
804
+ }
795
805
#endif
796
806
797
807
#if (ALGO == cryptonight_monero || ALGO == cryptonight_aeon || ALGO == cryptonight_ipbc || ALGO == cryptonight_stellite || ALGO == cryptonight_masari || ALGO == cryptonight_bittube2 )
@@ -807,7 +817,7 @@ __kernel void JOIN(cn1,ALGO) (__global uint4 *Scratchpad, __global ulong *states
807
817
SCRATCHPAD_CHUNK (0 ) = b_x [0 ];
808
818
idx0 = as_uint2 (c [0 ]).s0 & MASK ;
809
819
810
- #elif (ALGO == cryptonight_monero_v8 )
820
+ #elif (ALGO == cryptonight_monero_v8 || ALGO == cryptonight_v8_reversewaltz )
811
821
SCRATCHPAD_CHUNK (0 ) = b_x [0 ] ^ ((uint4 * )c )[0 ];
812
822
# ifdef __NV_CL_C_VERSION
813
823
// flush shuffled data
@@ -826,7 +836,7 @@ __kernel void JOIN(cn1,ALGO) (__global uint4 *Scratchpad, __global ulong *states
826
836
uint4 tmp ;
827
837
tmp = SCRATCHPAD_CHUNK (0 );
828
838
829
- #if (ALGO == cryptonight_monero_v8 )
839
+ #if (ALGO == cryptonight_monero_v8 || ALGO == cryptonight_v8_reversewaltz )
830
840
// Use division and square root results from the _previous_ iteration to hide the latency
831
841
tmp .s0 ^= division_result .s0 ;
832
842
tmp .s1 ^= division_result .s1 ^ sqrt_result ;
@@ -853,8 +863,13 @@ __kernel void JOIN(cn1,ALGO) (__global uint4 *Scratchpad, __global ulong *states
853
863
ulong2 chunk2 = as_ulong2 (SCRATCHPAD_CHUNK (2 ));
854
864
result_mul ^= chunk2 ;
855
865
ulong2 chunk3 = as_ulong2 (SCRATCHPAD_CHUNK (3 ));
866
+ #if (ALGO == cryptonight_v8_reversewaltz )
867
+ SCRATCHPAD_CHUNK (1 ) = as_uint4 (chunk1 + ((ulong2 * )(b_x + 1 ))[0 ]);
868
+ SCRATCHPAD_CHUNK (2 ) = as_uint4 (chunk3 + ((ulong2 * )b_x )[0 ]);
869
+ #else
856
870
SCRATCHPAD_CHUNK (1 ) = as_uint4 (chunk3 + ((ulong2 * )(b_x + 1 ))[0 ]);
857
871
SCRATCHPAD_CHUNK (2 ) = as_uint4 (chunk1 + ((ulong2 * )b_x )[0 ]);
872
+ #endif
858
873
SCRATCHPAD_CHUNK (3 ) = as_uint4 (chunk2 + ((ulong2 * )a )[0 ]);
859
874
a [0 ] += result_mul .s0 ;
860
875
a [1 ] += result_mul .s1 ;
@@ -882,7 +897,7 @@ __kernel void JOIN(cn1,ALGO) (__global uint4 *Scratchpad, __global ulong *states
882
897
883
898
((uint4 * )a )[0 ] ^= tmp ;
884
899
885
- #if (ALGO == cryptonight_monero_v8 )
900
+ #if (ALGO == cryptonight_monero_v8 || ALGO == cryptonight_v8_reversewaltz )
886
901
# if defined(__NV_CL_C_VERSION )
887
902
// flush shuffled data
888
903
SCRATCHPAD_CHUNK_GLOBAL = * scratchpad_line ;
0 commit comments