Skip to content

Commit

Permalink
Update to v0.8.5.
Browse files Browse the repository at this point in the history
  • Loading branch information
Mysticial committed Jul 4, 2024
1 parent cd52bd8 commit 2da54f2
Show file tree
Hide file tree
Showing 57 changed files with 1,832 additions and 219 deletions.
2 changes: 2 additions & 0 deletions trunk/Digits/Pi.txt
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,8 @@
62,831,853,071,796 | 7817924264 // UAS Grisons (2021)

100,000,000,000,000 | 3095295560 // Emma Haruka Iwao (2022)
105,000,000,000,000 | 8558373926 // StorageReview.com (2024)
202,112,290,000,000 | 3622511852 // StorageReview.com (2024)


// Super Pi Sizes
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
// Dependencies
#include <immintrin.h>
#include "PublicLibs/CompilerSettings.h"
#include "PublicLibs/ArchSpecificLibs/Shuffle/x86_256/Transpose_64x4x4_x86_AVX2.h"
#include "PublicLibs/ArchSpecificLibs/Shuffle/Transpose_64x4x4_x86_AVX2.h"
namespace DigitViewer2{
namespace DigitCount{
////////////////////////////////////////////////////////////////////////////////
Expand Down Expand Up @@ -93,7 +93,7 @@ void accumulate_b32_AVX2_64x4(u64_t digits[4], const __m256i* raw_digits, upL_t
sum1 = reduce_u8_to_u64_AVX2(sum1);
sum2 = reduce_u8_to_u64_AVX2(sum2);
sum3 = reduce_u8_to_u64_AVX2(sum3);
SIMD::transpose_i64_4x4_AVX2(sum0, sum1, sum2, sum3);
SIMD::transpose_i64x4x4_x86_AVX2(sum0, sum1, sum2, sum3);

sum0 = _mm256_add_epi64(sum0, sum1);
sum2 = _mm256_add_epi64(sum2, sum3);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
#include <immintrin.h>
#include "PublicLibs/CompilerSettings.h"
#include "PublicLibs/ArchSpecificLibs/x86_AVX512.h"
#include "PublicLibs/ArchSpecificLibs/Shuffle/x86_512/Transpose_64x8x8_x86_AVX512.h"
#include "PublicLibs/ArchSpecificLibs/Shuffle/Transpose_64x8x8_x86_AVX512.h"
namespace DigitViewer2{
namespace DigitCount{
////////////////////////////////////////////////////////////////////////////////
Expand Down Expand Up @@ -91,7 +91,7 @@ YM_FORCE_INLINE void accumulate_b64_AVX512_64x10(u64_t digits[10], const __m512i
sum8 = reduce_u8_to_u64_AVX512(sum8);
sum9 = reduce_u8_to_u64_AVX512(sum9);

SIMD::transpose_i64_8x8_AVX512(sum0, sum1, sum2, sum3, sum4, sum5, sum6, sum7);
SIMD::transpose_i64x8x8_x86_AVX512(sum0, sum1, sum2, sum3, sum4, sum5, sum6, sum7);

sum0 = _mm512_add_epi64(sum0, sum1);
sum2 = _mm512_add_epi64(sum2, sum3);
Expand Down Expand Up @@ -155,7 +155,7 @@ void accumulate_b64_AVX512_64x8(u64_t digits[8], const __m512i* raw_digits, upL_
sum5 = reduce_u8_to_u64_AVX512(sum5);
sum6 = reduce_u8_to_u64_AVX512(sum6);
sum7 = reduce_u8_to_u64_AVX512(sum7);
SIMD::transpose_i64_8x8_AVX512(sum0, sum1, sum2, sum3, sum4, sum5, sum6, sum7);
SIMD::transpose_i64x8x8_x86_AVX512(sum0, sum1, sum2, sum3, sum4, sum5, sum6, sum7);

sum0 = _mm512_add_epi64(sum0, sum1);
sum2 = _mm512_add_epi64(sum2, sum3);
Expand Down Expand Up @@ -238,7 +238,7 @@ YM_FORCE_INLINE void accumulate_b64_AVX512_64x16(u64_t digits[16], const __m512i
sum5 = reduce_u8_to_u64_AVX512(sum5);
sum6 = reduce_u8_to_u64_AVX512(sum6);
sum7 = reduce_u8_to_u64_AVX512(sum7);
SIMD::transpose_i64_8x8_AVX512(sum0, sum1, sum2, sum3, sum4, sum5, sum6, sum7);
SIMD::transpose_i64x8x8_x86_AVX512(sum0, sum1, sum2, sum3, sum4, sum5, sum6, sum7);
sum8 = reduce_u8_to_u64_AVX512(sum8);
sum9 = reduce_u8_to_u64_AVX512(sum9);
sumA = reduce_u8_to_u64_AVX512(sumA);
Expand All @@ -247,7 +247,7 @@ YM_FORCE_INLINE void accumulate_b64_AVX512_64x16(u64_t digits[16], const __m512i
sumD = reduce_u8_to_u64_AVX512(sumD);
sumE = reduce_u8_to_u64_AVX512(sumE);
sumF = reduce_u8_to_u64_AVX512(sumF);
SIMD::transpose_i64_8x8_AVX512(sum8, sum9, sumA, sumB, sumC, sumD, sumE, sumF);
SIMD::transpose_i64x8x8_x86_AVX512(sum8, sum9, sumA, sumB, sumC, sumD, sumE, sumF);

sum0 = _mm512_add_epi64(sum0, sum1);
sum2 = _mm512_add_epi64(sum2, sum3);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,7 @@
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
// Dependencies
#include "PublicLibs/ArchSpecificLibs/Shuffle/x86_128/AdjacentLanePermute_x86_128.h"
#include "PublicLibs/ArchSpecificLibs/Shuffle/x86_256/AdjacentLanePermute_x86_256.h"
#include "PublicLibs/ArchSpecificLibs/AdjacentLanePermute/AdjacentLanePermute_256_x86_AVX2.h"
#include "DigitViewer2/RawToDecKernels/Kernels_dec_to_i64_x64_AVX2.h"
#include "DigitViewer2/RawToDecKernels/Kernels_i64_to_dec_x64_AVX2.h"
namespace DigitViewer2{
Expand All @@ -34,27 +33,19 @@ YM_FORCE_INLINE bool dec_to_i64_u4_x64_AVX2(__m256i* T, const char* raw, upL_t b
do{
__m256i a0, b0, c0;

c0 = _mm256_setr_m128i(
SIMD::mm_splitload_si128(raw + 0, raw + 19),
SIMD::mm_splitload_si128(raw + 38, raw + 57)
);
#if 0
b0 = _mm256_setr_m128i(
SIMD::mm_splitload_si128(raw + 3, raw + 22),
SIMD::mm_splitload_si128(raw + 41, raw + 60)
);
a0 = _mm256_setr_m128i(
SIMD::mm_splitload_si128(raw + 11, raw + 30),
SIMD::mm_splitload_si128(raw + 49, raw + 68)
);
#else
{
__m128i x0, x1;
SIMD::splitload(x0, raw + 0, raw + 19);
SIMD::splitload(x1, raw + 38, raw + 57);
c0 = _mm256_setr_m128i(x0, x1);
}

__m256i r0;
r0 = SIMD::mm256_splitload_si256(raw + 3, raw + 41);
a0 = SIMD::mm256_splitload_si256(raw + 22, raw + 60);
SIMD::splitload(r0, raw + 3, raw + 41);
SIMD::splitload(a0, raw + 22, raw + 60);

b0 = _mm256_unpacklo_epi64(r0, a0);
a0 = _mm256_unpackhi_epi64(r0, a0);
#endif

c0 = _mm256_and_si256(c0, _mm256_set1_epi64x(0x0000000000ffffff));

Expand Down Expand Up @@ -83,20 +74,13 @@ YM_FORCE_INLINE void i64_to_dec_u4_x64_AVX2(char* raw, const __m256i* T, upL_t b
__m256i a0, b0, c0;
RawToDec::i64_to_dec_x64_AVX2(_mm256_loadu_si256(T), a0, b0, c0);

SIMD::mm_splitstore_si128(raw + 0, raw + 19, _mm256_castsi256_si128(c0));
SIMD::mm_splitstore_si128(raw + 38, raw + 57, _mm256_extracti128_si256(c0, 1));
#if 0
SIMD::mm_splitstore_si128(raw + 3, raw + 22, _mm256_castsi256_si128(b0));
SIMD::mm_splitstore_si128(raw + 41, raw + 60, _mm256_extracti128_si256(b0, 1));
SIMD::splitstore(_mm256_castsi256_si128(c0), raw + 0, raw + 19);
SIMD::splitstore(_mm256_extracti128_si256(c0, 1), raw + 38, raw + 57);

SIMD::mm_splitstore_si128(raw + 11, raw + 30, _mm256_castsi256_si128(a0));
SIMD::mm_splitstore_si128(raw + 49, raw + 68, _mm256_extracti128_si256(a0, 1));
#else
__m256i y0 = _mm256_unpacklo_epi64(b0, a0);
__m256i y1 = _mm256_unpackhi_epi64(b0, a0);
SIMD::mm256_splitstore_si256(raw + 3, raw + 41, y0);
SIMD::mm256_splitstore_si256(raw + 22, raw + 60, y1);
#endif
SIMD::splitstore(y0, raw + 3, raw + 41);
SIMD::splitstore(y1, raw + 22, raw + 60);

raw += 76;
T += 1;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
// Dependencies
#include "PublicLibs/ArchSpecificLibs/Shuffle/x86_256/AdjacentLanePermute_x86_256.h"
#include "PublicLibs/ArchSpecificLibs/AdjacentLanePermute/AdjacentLanePermute_256_x86_AVX2.h"
#include "DigitViewer2/RawToDecKernels/Kernels_dec_to_i64_x64_AVX512-BW.h"
#include "DigitViewer2/RawToDecKernels/Kernels_i64_to_dec_x64_AVX512-BW.h"
namespace DigitViewer2{
Expand Down Expand Up @@ -44,10 +44,11 @@ YM_FORCE_INLINE bool dec_to_i64_u8_x64_AVX512BW(__m512i* T, const char* raw, upL
a0 = _mm512_i64gather_epi64(GATHER, raw + 11, 1);
#else
{
__m256i r0 = SIMD::mm256_splitload_si256(raw + 3, raw + 41);
__m256i r1 = SIMD::mm256_splitload_si256(raw + 22, raw + 60);
__m256i r2 = SIMD::mm256_splitload_si256(raw + 79, raw + 117);
__m256i r3 = SIMD::mm256_splitload_si256(raw + 98, raw + 136);
__m256i r0, r1, r2, r3;
SIMD::splitload(r0, raw + 3, raw + 41);
SIMD::splitload(r1, raw + 22, raw + 60);
SIMD::splitload(r2, raw + 79, raw + 117);
SIMD::splitload(r3, raw + 98, raw + 136);

__m512i z0 = _mm512_inserti64x4(_mm512_castsi256_si512(r0), r2, 1);
__m512i z1 = _mm512_inserti64x4(_mm512_castsi256_si512(r1), r3, 1);
Expand Down Expand Up @@ -88,10 +89,10 @@ YM_FORCE_INLINE void i64_to_dec_u8_x64_AVX512BW(char* raw, const __m512i* T, upL
__m512i z0 = _mm512_unpacklo_epi64(b0, a0);
__m512i z1 = _mm512_unpackhi_epi64(b0, a0);

SIMD::mm256_splitstore_si256(raw + 3, raw + 41, _mm512_castsi512_si256(z0));
SIMD::mm256_splitstore_si256(raw + 22, raw + 60, _mm512_castsi512_si256(z1));
SIMD::mm256_splitstore_si256(raw + 79, raw + 117, _mm512_extracti64x4_epi64(z0, 1));
SIMD::mm256_splitstore_si256(raw + 98, raw + 136, _mm512_extracti64x4_epi64(z1, 1));
SIMD::splitstore(_mm512_castsi512_si256(z0), raw + 3, raw + 41);
SIMD::splitstore(_mm512_castsi512_si256(z1), raw + 22, raw + 60);
SIMD::splitstore(_mm512_extracti64x4_epi64(z0, 1), raw + 79, raw + 117);
SIMD::splitstore(_mm512_extracti64x4_epi64(z1, 1), raw + 98, raw + 136);
#endif

raw += 152;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
// Dependencies
#include "PublicLibs/ArchSpecificLibs/Shuffle/x86_128/AdjacentLanePermute_x86_128.h"
#include "PublicLibs/ArchSpecificLibs/AdjacentLanePermute/AdjacentLanePermute_128_x86_SSE2.h"
#include "DigitViewer2/RawToDecKernels/Kernels_dec_to_i64_x64_SSE41.h"
#include "DigitViewer2/RawToDecKernels/Kernels_i64_to_dec_x64_SSE41.h"
namespace DigitViewer2{
Expand All @@ -31,9 +31,10 @@ YM_FORCE_INLINE bool dec_to_i64_u2_x64_SSE41(__m128i* T, const char* raw, upL_t

__m128i bad = _mm_setzero_si128();
do{
__m128i c0 = SIMD::mm_splitload_si128(raw + 0, raw + 19);
__m128i b0 = SIMD::mm_splitload_si128(raw + 3, raw + 22);
__m128i a0 = SIMD::mm_splitload_si128(raw + 11, raw + 30);
__m128i a0, b0, c0;
SIMD::splitload(c0, raw + 0, raw + 19);
SIMD::splitload(b0, raw + 3, raw + 22);
SIMD::splitload(a0, raw + 11, raw + 30);
c0 = _mm_and_si128(c0, _mm_set1_epi64x(0x0000000000ffffff));

__m128i t0;
Expand All @@ -55,12 +56,14 @@ YM_FORCE_INLINE bool dec_to_i64_u4_x64_SSE41(__m128i* T, const char* raw, upL_t

__m128i bad = _mm_setzero_si128();
do{
__m128i c0 = SIMD::mm_splitload_si128(raw + 0, raw + 19);
__m128i b0 = SIMD::mm_splitload_si128(raw + 3, raw + 22);
__m128i a0 = SIMD::mm_splitload_si128(raw + 11, raw + 30);
__m128i c1 = SIMD::mm_splitload_si128(raw + 38, raw + 57);
__m128i b1 = SIMD::mm_splitload_si128(raw + 41, raw + 60);
__m128i a1 = SIMD::mm_splitload_si128(raw + 49, raw + 68);
__m128i a0, b0, c0;
__m128i a1, b1, c1;
SIMD::splitload(c0, raw + 0, raw + 19);
SIMD::splitload(b0, raw + 3, raw + 22);
SIMD::splitload(a0, raw + 11, raw + 30);
SIMD::splitload(c1, raw + 38, raw + 57);
SIMD::splitload(b1, raw + 41, raw + 60);
SIMD::splitload(a1, raw + 49, raw + 68);

c0 = _mm_and_si128(c0, _mm_set1_epi64x(0x0000000000ffffff));
c1 = _mm_and_si128(c1, _mm_set1_epi64x(0x0000000000ffffff));
Expand Down Expand Up @@ -95,9 +98,9 @@ YM_FORCE_INLINE void i64_to_dec_u2_x64_SSE41(char* raw, const __m128i* T, upL_t
__m128i a0, b0, c0;
RawToDec::i64_to_dec_x64_SSE41(_mm_loadu_si128(T), a0, b0, c0);

SIMD::mm_splitstore_si128(raw + 0, raw + 19, c0);
SIMD::mm_splitstore_si128(raw + 3, raw + 22, b0);
SIMD::mm_splitstore_si128(raw + 11, raw + 30, a0);
SIMD::splitstore(c0, raw + 0, raw + 19);
SIMD::splitstore(b0, raw + 3, raw + 22);
SIMD::splitstore(a0, raw + 11, raw + 30);

raw += 38;
T += 1;
Expand Down
20 changes: 7 additions & 13 deletions trunk/Source/DigitViewer2/WordToRaw/Kernels/WordToRaw_x64_AVX2.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@
// Dependencies
#include "PublicLibs/CompilerSettings.h"
#include "PublicLibs/Types.h"
#include "PublicLibs/ArchSpecificLibs/Shuffle/x86_128/AdjacentLanePermute_x86_128.h"
#include "PublicLibs/ArchSpecificLibs/Shuffle/x86_256/AdjacentLanePermute_x86_256.h"
#include "PublicLibs/ArchSpecificLibs/AdjacentLanePermute/AdjacentLanePermute_128_x86_SSE2.h"
#include "PublicLibs/ArchSpecificLibs/AdjacentLanePermute/AdjacentLanePermute_256_x86_AVX2.h"
#include "DigitViewer2/RawToDecKernels/Kernels_i64_to_dec_x64_AVX2.h"
namespace DigitViewer2{
namespace WordToRaw{
Expand Down Expand Up @@ -83,20 +83,14 @@ YM_FORCE_INLINE void w64_to_dec_u4_x64_AVX2(char* raw, const __m256i* T, upL_t b
__m256i a0, b0, c0;
RawToDec::i64_to_dec_x64_AVX2(T[0], a0, b0, c0);

SIMD::mm_splitstore_si128(raw + 57, raw + 38, _mm256_castsi256_si128(c0));
SIMD::mm_splitstore_si128(raw + 19, raw + 0, _mm256_extracti128_si256(c0, 1));
#if 0
SIMD::mm_splitstore_si128(raw + 60, raw + 41, _mm256_castsi256_si128(b0));
SIMD::mm_splitstore_si128(raw + 22, raw + 3, _mm256_extracti128_si256(b0, 1));
SIMD::splitstore(_mm256_castsi256_si128(c0), raw + 57, raw + 38);
SIMD::splitstore(_mm256_extracti128_si256(c0, 1), raw + 19, raw + 0);

SIMD::mm_splitstore_si128(raw + 68, raw + 49, _mm256_castsi256_si128(a0));
SIMD::mm_splitstore_si128(raw + 30, raw + 11, _mm256_extracti128_si256(a0, 1));
#else
__m256i y0 = _mm256_unpacklo_epi64(b0, a0);
__m256i y1 = _mm256_unpackhi_epi64(b0, a0);
SIMD::mm256_splitstore_si256(raw + 60, raw + 22, y0);
SIMD::mm256_splitstore_si256(raw + 41, raw + 3, y1);
#endif
SIMD::splitstore(y0, raw + 60, raw + 22);
SIMD::splitstore(y1, raw + 41, raw + 3);


T += 1;
}while (--blocks);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
// Dependencies
#include "PublicLibs/CompilerSettings.h"
#include "PublicLibs/Types.h"
#include "PublicLibs/ArchSpecificLibs/Shuffle/x86_256/AdjacentLanePermute_x86_256.h"
#include "PublicLibs/ArchSpecificLibs/AdjacentLanePermute/AdjacentLanePermute_256_x86_AVX2.h"
#include "DigitViewer2/RawToDecKernels/Kernels_i64_to_dec_x64_AVX512-BW.h"
namespace DigitViewer2{
namespace WordToRaw{
Expand Down Expand Up @@ -94,10 +94,10 @@ YM_FORCE_INLINE void w64_to_dec_u8_x64_AVX512BW(char* raw, const __m512i* T, upL
__m512i z0 = _mm512_unpacklo_epi64(b0, a0);
__m512i z1 = _mm512_unpackhi_epi64(b0, a0);

SIMD::mm256_splitstore_si256(raw + 136, raw + 98, _mm512_castsi512_si256(z0));
SIMD::mm256_splitstore_si256(raw + 117, raw + 79, _mm512_castsi512_si256(z1));
SIMD::mm256_splitstore_si256(raw + 60, raw + 22, _mm512_extracti64x4_epi64(z0, 1));
SIMD::mm256_splitstore_si256(raw + 41, raw + 3, _mm512_extracti64x4_epi64(z1, 1));
SIMD::splitstore(_mm512_castsi512_si256(z0), raw + 136, raw + 98);
SIMD::splitstore(_mm512_castsi512_si256(z1), raw + 117, raw + 79);
SIMD::splitstore(_mm512_extracti64x4_epi64(z0, 1), raw + 60, raw + 22);
SIMD::splitstore(_mm512_extracti64x4_epi64(z1, 1), raw + 41, raw + 3);
#endif

T += 1;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
// Dependencies
#include "PublicLibs/CompilerSettings.h"
#include "PublicLibs/Types.h"
#include "PublicLibs/ArchSpecificLibs/Shuffle/x86_128/AdjacentLanePermute_x86_128.h"
#include "PublicLibs/ArchSpecificLibs/AdjacentLanePermute/AdjacentLanePermute_128_x86_SSE2.h"
#include "DigitViewer2/RawToDecKernels/Kernels_i64_to_dec_x64_SSE41.h"
namespace DigitViewer2{
namespace WordToRaw{
Expand Down Expand Up @@ -83,9 +83,9 @@ YM_FORCE_INLINE void w64_to_dec_u2_x64_SSE41(char* raw, const __m128i* T, upL_t
__m128i a0, b0, c0;
RawToDec::i64_to_dec_x64_SSE41(T[0], a0, b0, c0);

SIMD::mm_splitstore_si128(raw + 19, raw + 0, c0);
SIMD::mm_splitstore_si128(raw + 22, raw + 3, b0);
SIMD::mm_splitstore_si128(raw + 30, raw + 11, a0);
SIMD::splitstore(c0, raw + 19, raw + 0);
SIMD::splitstore(b0, raw + 22, raw + 3);
SIMD::splitstore(a0, raw + 30, raw + 11);

T += 1;
}while (--blocks);
Expand Down
6 changes: 3 additions & 3 deletions trunk/Source/Launcher/Launcher.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,19 +42,19 @@ bool pause_on_warning = true;
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
void handle_pause(CommandLine::Parameters& cmds){
auto& value = cmds.CurrentValue();
auto& value = cmds.current_value();
cmds.advance();
int pause_on_exit = static_cast<int>(StringTools::parse_sL_text(value));
pause_on_warning = pause_on_exit > -1;
Console::pause_on_error = pause_on_exit > -2;
}
void handle_colors(CommandLine::Parameters& cmds){
auto& value = cmds.CurrentValue();
auto& value = cmds.current_value();
cmds.advance();
Console::enable_colors = StringTools::parse_sL_text(value) > 0;
}
void handle_height(CommandLine::Parameters& cmds){
auto& value = cmds.CurrentValue();
auto& value = cmds.current_value();
cmds.advance();
int height = static_cast<int>(StringTools::parse_sL_text(value));
Console::set_console_window_size(80, height);
Expand Down
20 changes: 20 additions & 0 deletions trunk/Source/Launcher/Vendor-AMD.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,26 @@ void dispatch_AMD(const cpu_x86& features){
if (features.HW_AVX512_VP2INTERSECT){
dispatch_2024_x64_Zen5(features);
}
#else
if (features.HW_AVX512_VP2INTERSECT && can_run_2024_x64_Zen5(features)){
Console::println("", 'Y');
Console::println("Detected a Zen5 processor!");
Console::println();
Console::println("Optimizations are not yet available for this processor as they are pending");
Console::println("final hardware for proper tuning.");
Console::println();
Console::println(" https://twitter.com/Mysticial/status/1797478508157124717");
Console::println();
Console::println("As the release date for Zen5 approaches, please stay tuned for an update");
Console::println("to this release that will have Zen5 optimizations.");
Console::println();
Console::println("Falling back to the Zen4 binary...");
Console::println();
Console::set_color('w');
if (pause_on_warning){
Console::pause();
}
}
#endif
#ifdef YCR_ENABLE_2022_x64_Zen4
dispatch_2022_x64_Zen4(features);
Expand Down
Loading

0 comments on commit 2da54f2

Please sign in to comment.