Skip to content

Commit

Permalink
Dont have loop < 4
Browse files Browse the repository at this point in the history
  • Loading branch information
EbbDrop committed Dec 26, 2024
1 parent 57fa1d2 commit 77c4617
Showing 1 changed file with 56 additions and 15 deletions.
71 changes: 56 additions & 15 deletions src/day25.rs
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ unsafe fn part1_inner(s: &[u8]) -> u64 {
"je 2f", // Jump on empty
"mov {i}, {max_i}",
"cmp {i}, 16",
"jb 6f", // Jump to < 16 case
"jb 7f", // Jump to < 16 case

"4:",
"vpaddq {vt}, {d}, ymmword ptr [{os} + 8*{i} - 32]",
Expand Down Expand Up @@ -96,26 +96,47 @@ unsafe fn part1_inner(s: &[u8]) -> u64 {
"add {sum},{t}",
"cmp {i}, 16",
"jae 4b", // Loop
"6:",
"7:",
// i < 16
"cmp {i}, 4",
"jb 3f", // Is < 4
// Is >= 4 and < 16
"cmp {i}, 8",
"jb 5f", // Is < 8
"cmp {i}, 12",
"jb 6f", // Is < 8

// i < 16
"vpaddq {vt}, {d}, ymmword ptr [{os} + 8*{i} - 32]",
"add {i}, -4",
"vpand {vt}, {vt}, {msb}",
"vpcmpeqq {vt}, {vt}, {zero}",
"vpmovmskb {t}, {vt}",
"popcnt {t}, {t}",
"add {sum},{t}",

"6:",
// i < 12
"vpaddq {vt}, {d}, ymmword ptr [{os} + 8*{i} - 32]",
"add {i}, -4",
"vpand {vt}, {vt}, {msb}",
"vpcmpeqq {vt}, {vt}, {zero}",
"vpmovmskb {t}, {vt}",
"popcnt {t}, {t}",
"add {sum},{t}",

"5:",
// i < 8
"vpaddq {vt}, {d}, ymmword ptr [{os} + 8*{i} - 32]",
"add {i}, -4",
"vpand {vt}, {vt}, {msb}",
"vpcmpeqq {vt}, {vt}, {zero}",
"vpmovmskb {t}, {vt}",
"popcnt {t}, {t}",
"add {sum},{t}",
"cmp {i}, 4",
"jae 5b", // Loop

"3:",
"test {i}, {i}",
"je 2f", // Is zero

// Is > 0 and < 4
"vpaddq {vt}, {d}, ymmword ptr [{os}]",
"vpand {vt}, {vt}, {msb}",
"vpcmpeqq {vt}, {vt}, {zero}",
Expand All @@ -140,12 +161,11 @@ unsafe fn part1_inner(s: &[u8]) -> u64 {
keys_i += 1;
} else {
std::arch::asm!(

"test {max_i}, {max_i}",
"je 2f", // Jump on empty
"mov {i}, {max_i}",
"cmp {i}, 16",
"jb 6f", // Jump to < 16 case
"jb 7f", // Jump to < 16 case

"4:",
"vpaddq {vt}, {d}, ymmword ptr [{os} + 8*{i} - 32]",
Expand Down Expand Up @@ -175,26 +195,47 @@ unsafe fn part1_inner(s: &[u8]) -> u64 {
"add {sum},{t}",
"cmp {i}, 16",
"jae 4b", // Loop
"6:",
"7:",
// i < 16
"cmp {i}, 4",
"jb 3f", // Is < 4
// Is >= 4 and < 16
"cmp {i}, 8",
"jb 5f", // Is < 8
"cmp {i}, 12",
"jb 6f", // Is < 8

// i < 16
"vpaddq {vt}, {d}, ymmword ptr [{os} + 8*{i} - 32]",
"add {i}, -4",
"vpand {vt}, {vt}, {msb}",
"vpcmpeqq {vt}, {vt}, {zero}",
"vpmovmskb {t}, {vt}",
"popcnt {t}, {t}",
"add {sum},{t}",

"6:",
// i < 12
"vpaddq {vt}, {d}, ymmword ptr [{os} + 8*{i} - 32]",
"add {i}, -4",
"vpand {vt}, {vt}, {msb}",
"vpcmpeqq {vt}, {vt}, {zero}",
"vpmovmskb {t}, {vt}",
"popcnt {t}, {t}",
"add {sum},{t}",

"5:",
// i < 8
"vpaddq {vt}, {d}, ymmword ptr [{os} + 8*{i} - 32]",
"add {i}, -4",
"vpand {vt}, {vt}, {msb}",
"vpcmpeqq {vt}, {vt}, {zero}",
"vpmovmskb {t}, {vt}",
"popcnt {t}, {t}",
"add {sum},{t}",
"cmp {i}, 4",
"jae 5b", // Loop

"3:",
"test {i}, {i}",
"je 2f", // Is zero

// Is > 0 and < 4
"vpaddq {vt}, {d}, ymmword ptr [{os}]",
"vpand {vt}, {vt}, {msb}",
"vpcmpeqq {vt}, {vt}, {zero}",
Expand Down

0 comments on commit 77c4617

Please sign in to comment.