Skip to content

Commit 7e4aa84

Browse files
committed
Very slight improvement
1 parent 983f86a commit 7e4aa84

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

src/day25.rs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,11 @@ unsafe fn part1_inner(s: &[u8]) -> u64 {
5050

5151
if is_key {
5252
std::arch::asm!(
53-
"test {i}, {i}",
53+
"test {max_i}, {max_i}",
5454
"je 2f", // Jump on empty
55-
"cmp {i}, 1",
55+
"cmp {max_i}, 1",
5656
"je 3f", // Jump to one case
57+
"mov {i}, {max_i}",
5758
"shl {i}, 5",
5859
"4:",
5960
"add {i}, -64",
@@ -75,8 +76,9 @@ unsafe fn part1_inner(s: &[u8]) -> u64 {
7576
"adc {sum}, 0",
7677
"2:",
7778
os = in(reg) holes,
79+
max_i = in(reg) holes_i,
7880
d = in(ymm_reg) d,
79-
i = inout(reg) holes_i => _,
81+
i = out(reg) _,
8082
sum = inout(reg) sum,
8183
t = out(reg) _,
8284
vt = out(ymm_reg) _,
@@ -97,10 +99,11 @@ unsafe fn part1_inner(s: &[u8]) -> u64 {
9799
keys_i += 1;
98100
} else {
99101
std::arch::asm!(
100-
"test {i}, {i}",
102+
"test {max_i}, {max_i}",
101103
"je 2f", // Jump on empty
102-
"cmp {i}, 1",
104+
"cmp {max_i}, 1",
103105
"je 3f", // Jump to one case
106+
"mov {i}, {max_i}",
104107
"shl {i}, 5",
105108
"4:",
106109
"add {i}, -64",
@@ -122,8 +125,9 @@ unsafe fn part1_inner(s: &[u8]) -> u64 {
122125
"adc {sum}, 0",
123126
"2:",
124127
os = in(reg) keys,
128+
max_i = in(reg) keys_i,
125129
d = in(ymm_reg) d,
126-
i = inout(reg) keys_i => _,
130+
i = out(reg) _,
127131
sum = inout(reg) sum,
128132
t = out(reg) _,
129133
vt = out(ymm_reg) _,

0 commit comments

Comments
 (0)