Skip to content

Commit 0b32a09

Browse files
committed
Merge branch 'patternsearch' of https://github.com/twevs/pcsx-redux into patternsearch
2 parents ddb7d4e + 46b9d3a commit 0b32a09

File tree

2 files changed

+12
-17
lines changed

2 files changed

+12
-17
lines changed

src/gui/widgets/memory_observer.cc

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ void PCSX::Widgets::MemoryObserver::draw(const char* title) {
227227

228228
ImGui::InputInt(_("Step"), &m_step);
229229

230-
if (ImGui::Button(_("Search"))) {
230+
if (m_step >= 1 && ImGui::Button(_("Search"))) {
231231
if (m_useSIMD && m_sequenceSize == 8) {
232232
simd_populateAddressList<8>(memData, memBase, memSize);
233233
} else if (m_useSIMD && m_sequenceSize == 16) {
@@ -304,11 +304,9 @@ bool PCSX::Widgets::MemoryObserver::all_equal(__m256i vec) {
304304

305305
std::vector<uint8_t> PCSX::Widgets::MemoryObserver::getShuffleResultsFor(const std::vector<uint8_t>& buffer) {
306306
const size_t bufferSize = buffer.size();
307-
308307
auto results = std::vector<uint8_t>(bufferSize * bufferSize);
309308

310309
auto shuffledBuffer = buffer;
311-
312310
for (auto i = 0u; i < bufferSize; ++i) {
313311
std::shift_left(shuffledBuffer.begin(), shuffledBuffer.end(), 1);
314312

@@ -325,7 +323,6 @@ bool PCSX::Widgets::MemoryObserver::matchesPattern(const std::vector<uint8_t>& b
325323
const size_t bufferSize = buffer.size();
326324

327325
auto shuffledBuffer = buffer;
328-
329326
for (auto i = 0u; i < bufferSize; ++i) {
330327
std::shift_left(shuffledBuffer.begin(), shuffledBuffer.end(), 1);
331328

@@ -345,8 +342,7 @@ void PCSX::Widgets::MemoryObserver::populateAddressList(const uint8_t* memData,
345342
const auto patternShuffleResults = getShuffleResultsFor(buffer);
346343

347344
m_addresses.clear();
348-
const auto step = m_step;
349-
for (auto i = 0; i + sequenceSize < memSize; i += step) {
345+
for (auto i = 0; i + sequenceSize < memSize; i += m_step) {
350346
std::copy_n(memData + i, sequenceSize, buffer.data());
351347

352348
if (matchesPattern(buffer, patternShuffleResults)) {

src/gui/widgets/memory_observer.h

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -86,35 +86,35 @@ class MemoryObserver {
8686
for (auto j = 0u; j < (32 / bufferSize); ++j) {
8787
std::ranges::copy(buffer, extendedBuffer.begin() + j * bufferSize);
8888
}
89-
const auto twoCopies = _mm256_loadu_epi8(extendedBuffer.data());
89+
const auto copies = _mm256_loadu_epi8(extendedBuffer.data());
9090

9191
switch (mask) {
9292
case 0: {
9393
const auto firstShuffleMask = _mm256_set_epi8(3, 2, 1, 0, 7, 6, 5, 4, 2, 1, 0, 7, 6, 5, 4, 3, 1, 0, 7,
9494
6, 5, 4, 3, 2, 0, 7, 6, 5, 4, 3, 2, 1);
95-
const auto firstShuffle = _mm256_shuffle_epi8(twoCopies, firstShuffleMask);
96-
return _mm256_cmpeq_epi8(twoCopies, firstShuffle);
95+
const auto firstShuffle = _mm256_shuffle_epi8(copies, firstShuffleMask);
96+
return _mm256_cmpeq_epi8(copies, firstShuffle);
9797
}
9898
case 1: {
9999
const auto secondShuffleMask = _mm256_set_epi8(7, 6, 5, 4, 3, 2, 1, 0, 6, 5, 4, 3, 2, 1, 0, 7, 5, 4, 3,
100100
2, 1, 0, 7, 6, 4, 3, 2, 1, 0, 7, 6, 5);
101-
const auto secondShuffle = _mm256_shuffle_epi8(twoCopies, secondShuffleMask);
102-
return _mm256_cmpeq_epi8(twoCopies, secondShuffle);
101+
const auto secondShuffle = _mm256_shuffle_epi8(copies, secondShuffleMask);
102+
return _mm256_cmpeq_epi8(copies, secondShuffle);
103103
}
104104
case 2: {
105105
assert(bufferSize == 16);
106106
const auto thirdShuffleMask = _mm256_set_epi8(11, 10, 9, 8, 7, 6, 5, 4, 10, 9, 8, 7, 6, 5, 4, 3, 9, 8,
107107
7, 6, 5, 4, 3, 2, 8, 7, 6, 5, 4, 3, 2, 1);
108-
const auto thirdShuffle = _mm256_shuffle_epi8(twoCopies, thirdShuffleMask);
109-
return _mm256_cmpeq_epi8(twoCopies, thirdShuffle);
108+
const auto thirdShuffle = _mm256_shuffle_epi8(copies, thirdShuffleMask);
109+
return _mm256_cmpeq_epi8(copies, thirdShuffle);
110110
}
111111
case 3: {
112112
assert(bufferSize == 16);
113113
const auto fourthShuffleMask =
114114
_mm256_set_epi8(15, 14, 13, 12, 11, 10, 9, 8, 14, 13, 12, 11, 10, 9, 8, 7, 13, 12, 11, 10, 9, 8, 7,
115115
6, 12, 11, 10, 9, 8, 7, 6, 5);
116-
const auto fourthShuffle = _mm256_shuffle_epi8(twoCopies, fourthShuffleMask);
117-
return _mm256_cmpeq_epi8(twoCopies, fourthShuffle);
116+
const auto fourthShuffle = _mm256_shuffle_epi8(copies, fourthShuffleMask);
117+
return _mm256_cmpeq_epi8(copies, fourthShuffle);
118118
}
119119
default:
120120
return _mm256_setzero_si256();
@@ -138,8 +138,7 @@ class MemoryObserver {
138138
}
139139

140140
m_addresses.clear();
141-
const auto step = m_step;
142-
for (auto i = 0u; i + sequenceSize < memSize; i += step) {
141+
for (auto i = 0u; i + sequenceSize < memSize; i += m_step) {
143142
std::copy_n(memData + i, sequenceSize, buffer.data());
144143

145144
bool bAllEqual = true;

0 commit comments

Comments
 (0)