Skip to content

Commit 2a90d10

Browse files
committed
Use own array type (has bad codegen in loops)
1 parent b1cbdfe commit 2a90d10

File tree

1 file changed

+15
-9
lines changed

1 file changed

+15
-9
lines changed

src/day25.rs

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use std::arch::x86_64::*;
1+
use std::{arch::x86_64::*, mem::MaybeUninit};
22

33
use aoc_runner_derive::aoc;
44

@@ -17,8 +17,10 @@ const KEPT_BITS: i8 = 0b011;
1717
unsafe fn part1_inner(s: &[u8]) -> u64 {
1818
let mut sum = 0;
1919

20-
let mut keys = heapless::Vec::<__m256i, 512>::new();
21-
let mut holes = heapless::Vec::<__m256i, 512>::new();
20+
let mut keys = [MaybeUninit::<__m256i>::uninit(); 512];
21+
let mut keys_i = 0;
22+
let mut holes = [MaybeUninit::<__m256i>::uninit(); 512];
23+
let mut holes_i = 0;
2224

2325
let mut i = 0;
2426

@@ -43,8 +45,9 @@ unsafe fn part1_inner(s: &[u8]) -> u64 {
4345
);
4446

4547
if is_key {
46-
for o in &holes {
47-
let collisions = _mm256_cmpeq_epi8(d, *o);
48+
for i in 0..holes_i {
49+
let o = holes.get_unchecked(i).assume_init_read();
50+
let collisions = _mm256_cmpeq_epi8(d, o);
4851
let collisions = _mm256_movemask_epi8(collisions);
4952
sum += (collisions == 0) as u64;
5053
}
@@ -59,10 +62,12 @@ unsafe fn part1_inner(s: &[u8]) -> u64 {
5962
0, 0, 0, 0, 0, -1, -1, -1,
6063
),
6164
);
62-
keys.push_unchecked(d);
65+
keys.get_unchecked_mut(keys_i).write(d);
66+
keys_i += 1;
6367
} else {
64-
for o in &keys {
65-
let collisions = _mm256_cmpeq_epi8(d, *o);
68+
for i in 0..keys_i {
69+
let o = keys.get_unchecked(i).assume_init_read();
70+
let collisions = _mm256_cmpeq_epi8(d, o);
6671
let collisions = _mm256_movemask_epi8(collisions);
6772
sum += (collisions == 0) as u64;
6873
}
@@ -77,7 +82,8 @@ unsafe fn part1_inner(s: &[u8]) -> u64 {
7782
0, 0, 0, 0, 0, -1, -1, -1,
7883
),
7984
);
80-
holes.push_unchecked(d);
85+
holes.get_unchecked_mut(holes_i).write(d);
86+
holes_i += 1;
8187
}
8288

8389
i += DS;

0 commit comments

Comments
 (0)