2020/day3: part1 and part2
This commit is contained in:
parent
8868221a5b
commit
8fbaa207c5
1
.gitignore
vendored
1
.gitignore
vendored
@ -2,3 +2,4 @@
|
|||||||
*.o
|
*.o
|
||||||
*.bin
|
*.bin
|
||||||
*.d
|
*.d
|
||||||
|
*.map
|
||||||
|
323
2020/day3/input.txt
Normal file
323
2020/day3/input.txt
Normal file
@ -0,0 +1,323 @@
|
|||||||
|
.#....#..##.#..####....#.......
|
||||||
|
......#..#....#....###......#.#
|
||||||
|
#..#.....#..............##.#.#.
|
||||||
|
#.#...#....#...#......##..#..#.
|
||||||
|
...#..#.##..#..#........###.#.#
|
||||||
|
...#.#..........#.........##...
|
||||||
|
...#.#....#.#....#..#......#...
|
||||||
|
..##.#.....#.......#.###..#..##
|
||||||
|
..#.......#.......#....##......
|
||||||
|
....##........##.##...#.###.##.
|
||||||
|
#.......#.......##..#......#...
|
||||||
|
..##.............##.#......#...
|
||||||
|
...#.####....#.....#...##......
|
||||||
|
.............##.#......#.......
|
||||||
|
..#...#....#......#....#.......
|
||||||
|
..#....#..#............#.......
|
||||||
|
##...#..#........##..#......#..
|
||||||
|
##........##........#.#.......#
|
||||||
|
#.......#........#.#..#....###.
|
||||||
|
.....#..#.#..........##...#....
|
||||||
|
..##...#......#.#...#..#...#...
|
||||||
|
##.##...#......#....#....#...#.
|
||||||
|
#.......#..#.#..#....#..###.#.#
|
||||||
|
#.............#.#....#..#.#....
|
||||||
|
...#.......###.#.##.##.#...#..#
|
||||||
|
.##.......##..##...#..###......
|
||||||
|
.......#.#.#.#..####..#..#..#..
|
||||||
|
...##......#.#.##.###....#.###.
|
||||||
|
###......###......#.#####..#...
|
||||||
|
..#........##..#..##.##..#...#.
|
||||||
|
.....##..#...#..#.##.....#.#...
|
||||||
|
#......#.##....#..##.#....#.#..
|
||||||
|
##.#.##..#................#....
|
||||||
|
......#.#....#......##.....#...
|
||||||
|
..#...##..#..#...#..#.#..#.....
|
||||||
|
........#.#.#.##...#.#.....#.#.
|
||||||
|
#.#......#.....##..#...#.......
|
||||||
|
..#.#......#...........###.....
|
||||||
|
......##....#....##..#..#.#.#.#
|
||||||
|
##....#.###...#......#..#...#..
|
||||||
|
#.#.##....###...####.......#..#
|
||||||
|
##...........#.....#........#.#
|
||||||
|
.##.#..#.....#......#.......#..
|
||||||
|
##..##..###....#.........##....
|
||||||
|
..#..#..#.##...#.#...#........#
|
||||||
|
#.##.###...#.......#...........
|
||||||
|
.........#.................#...
|
||||||
|
#.##...#.....#..##........#....
|
||||||
|
....#.#...##...#...........#...
|
||||||
|
.#.....#.#..#...##..##.....#...
|
||||||
|
.#.....####....#..##..#........
|
||||||
|
...#..#......##.#..##.#.#.#..#.
|
||||||
|
.##.#.....#.....#...#.......##.
|
||||||
|
......#..#..#......#...####....
|
||||||
|
.......#......##..#..##.....#..
|
||||||
|
......#.#..#...#..#.#..........
|
||||||
|
....##.........#...............
|
||||||
|
.#....#..##.....#....##.##.....
|
||||||
|
#.#.....#...#....####....#.#...
|
||||||
|
#.....#....#.#...#.............
|
||||||
|
...#..#.....#....##..#..#......
|
||||||
|
...#.#............#...........#
|
||||||
|
###.#..#.#......#.....##.....#.
|
||||||
|
####....#....###.....#..#.#####
|
||||||
|
.###..#...#.#..#......##.#.#.#.
|
||||||
|
.....#.##.#....#..##....#..#..#
|
||||||
|
...#....#...##.....#......#.#..
|
||||||
|
....#...#....#...#....#.....#.#
|
||||||
|
.#.....#.....#.#..#......#..#..
|
||||||
|
..#..##....##.##....#.....##...
|
||||||
|
#..##...#.##...#..#.#.#.....#..
|
||||||
|
...#..##.#..#....#.#....######.
|
||||||
|
..........#..#.....#....#...##.
|
||||||
|
#.#####.#.###..#.....#.........
|
||||||
|
#....#......#..#.#.##.##..###..
|
||||||
|
..#...###.#.#....##.##...##....
|
||||||
|
.......#....#..#...##......#...
|
||||||
|
...#.#...#..#.....#..##.#......
|
||||||
|
###..##...........#............
|
||||||
|
..#....#.##....#.#..##...#.....
|
||||||
|
##....#...#....#.....#.#..##...
|
||||||
|
..............#.##.#..#..##.###
|
||||||
|
......#..#..#..#.#....###...##.
|
||||||
|
.#...#..#.#.#....#..........#..
|
||||||
|
..#.#.....#..#...........#.##..
|
||||||
|
...#.#......#......#..#..#.#...
|
||||||
|
...#....#.#.#.....#...#.##..#..
|
||||||
|
.#.#..#...#........##.......#..
|
||||||
|
##..........#..#...#....###.#..
|
||||||
|
#.....###......#..#.#.#....#.#.
|
||||||
|
..###.......#.#...............#
|
||||||
|
#....#.....#.#......#..##.##...
|
||||||
|
#.##.#.#....#..#.#...#.#...#..#
|
||||||
|
#....#..#...........#.......#..
|
||||||
|
...#.####.....#.........###.##.
|
||||||
|
......#..#.....#..........#..#.
|
||||||
|
#...#.#..####...#...#.#.##...##
|
||||||
|
.##.........#......#.#.#.......
|
||||||
|
.......##...##.##....###...##..
|
||||||
|
...#..#....#..#.#.#.....#.#....
|
||||||
|
#....#.#.#.......##..###..##...
|
||||||
|
......#............#.#...#..#..
|
||||||
|
#.#.....#......#...#.......###.
|
||||||
|
...#.#................#...#....
|
||||||
|
.....#......#.#..#...##.#.#...#
|
||||||
|
#....#.#..#..#..##..#.##..#....
|
||||||
|
#.................#..#....#....
|
||||||
|
..#....#.......####....###.....
|
||||||
|
.#..#.#.#...###..#...#..###....
|
||||||
|
..#..#.#......#.###..........#.
|
||||||
|
.....#......#.......##....##.#.
|
||||||
|
.#....#........#.#.##.#........
|
||||||
|
#.#..##..#..#.#...####....##...
|
||||||
|
...#....#.#..#...#..........#..
|
||||||
|
.#.....#.##....#...##..........
|
||||||
|
....##....#.....#.....#...#.###
|
||||||
|
.#...##.#.#..##..#...#.#..#..#.
|
||||||
|
..#.......#.##.....#.#........#
|
||||||
|
...#...#.....##..#.#.#....#....
|
||||||
|
...#.....#.......##.........#.#
|
||||||
|
.##.....#..#.#...#.#...#.#...#.
|
||||||
|
...........#...#.###..#...#..#.
|
||||||
|
#.##........#..###.##...####...
|
||||||
|
.#.....#.#...##...#..#..#...##.
|
||||||
|
..#....#..#...#.....#.....##...
|
||||||
|
..###..#.#.....##........#.##..
|
||||||
|
.#.#..##........#.##....#..#.##
|
||||||
|
.####.#..##..#.#..#....##....#.
|
||||||
|
.##....##...#.#........#.......
|
||||||
|
....#..#..#...#..#..#..#.#.....
|
||||||
|
...#......................#....
|
||||||
|
#.....#.#....#..#..#.#..#....#.
|
||||||
|
##.....#.....##..........###...
|
||||||
|
.#..#..............#...##.#.#.#
|
||||||
|
...#...#.#.............#.#..#.#
|
||||||
|
..#.....#.......#......#.#.....
|
||||||
|
.###.#..#..#..#.#..#.....#.....
|
||||||
|
.....##..##...##.......#....###
|
||||||
|
.#........###...##..#....##....
|
||||||
|
#....#.#......##..#....#.##..#.
|
||||||
|
#....#.#...#........##...###...
|
||||||
|
.#.....#...#.###....#.##.#.####
|
||||||
|
###......#....#...#....##..#..#
|
||||||
|
##....#..###......#...#.#.#....
|
||||||
|
..........#......##.#..#.......
|
||||||
|
.#..#......###.........##...#..
|
||||||
|
....#......#....#.........#.#.#
|
||||||
|
##.#.#...#.#...#...#..#......#.
|
||||||
|
....#.##.........#..#.....##.#.
|
||||||
|
........#...#..#.#.#.#.....##..
|
||||||
|
..#......#.#.#..#.....##.......
|
||||||
|
..............#....#....##.#..#
|
||||||
|
....#.#.....#....#.#.###.#....#
|
||||||
|
..#..........#..#......#.##..#.
|
||||||
|
...#...#.#.............#..#....
|
||||||
|
#.......#..#..##.........##..#.
|
||||||
|
..##..#............#.....#.....
|
||||||
|
....#.#..##...#.#..#.........#.
|
||||||
|
........#.......#.##....#....#.
|
||||||
|
...#.....#.#.....#.#....#......
|
||||||
|
..#......##.#.............#.#.#
|
||||||
|
#.#.............#.#.....#......
|
||||||
|
.##....##.#.....#....#...##....
|
||||||
|
.#.#....##....#.....##.........
|
||||||
|
...#.....#.....#.....#..#.###..
|
||||||
|
.......#....#...##.#...#...#..#
|
||||||
|
..#.#.......#...###.#...#....#.
|
||||||
|
.....###..##....###.#.##.......
|
||||||
|
....#..................##.#.##.
|
||||||
|
.#.......###.##...#.#.....#....
|
||||||
|
....#....##...##.....#.#...#..#
|
||||||
|
#..#.....#......##...#....#....
|
||||||
|
#..##.........#.....#...#......
|
||||||
|
...#..##.......##......#..#####
|
||||||
|
.#..###.###.#.##........#......
|
||||||
|
.#...#....#....#.#....#...##...
|
||||||
|
##........#....#.........##..#.
|
||||||
|
.#.....##............#.#.......
|
||||||
|
....#....#...........###.....##
|
||||||
|
.#......#.#.#..#....#.#.....##.
|
||||||
|
......#.##.#..##....#.#.#..#...
|
||||||
|
#....#......#...#..####........
|
||||||
|
......#..#..##..#.......#.#..#.
|
||||||
|
##....##.###.#...#.##.#..#.###.
|
||||||
|
.#.........#...##...#.#......#.
|
||||||
|
..#.#...........####.#....##.##
|
||||||
|
.....#.#..##.#...###...#..#.#..
|
||||||
|
...#..#..##.#...#.....#.##...##
|
||||||
|
..##......##..........#..###...
|
||||||
|
.#......##.....#.##....#.#.##.#
|
||||||
|
...#.......##..##.....#....#...
|
||||||
|
.##...#...#....#..#............
|
||||||
|
#..#....#...........#..........
|
||||||
|
......#...#.#.......#...#.##..#
|
||||||
|
..#.###..#.....#.....#..#.....#
|
||||||
|
....#....#..........##....#..#.
|
||||||
|
.......##.#.#.#......#....#...#
|
||||||
|
####..#.###........#..#......#.
|
||||||
|
#........##.#.#.#.............#
|
||||||
|
.#......#......#..#.##.....#...
|
||||||
|
.....##.##......##.#.....#.#.#.
|
||||||
|
.......##.#.....##.......#.#.#.
|
||||||
|
.#.#..#.#..#.##...#.#....#.#..#
|
||||||
|
.#..##....#..#...##.......#..#.
|
||||||
|
.#.#..#.......#................
|
||||||
|
#........#.#.#......#.#.#.#....
|
||||||
|
##......#...#..##.#...##.##....
|
||||||
|
##.#..#...........##...#..###..
|
||||||
|
......#.####...#........#.#.#..
|
||||||
|
...#........##..###.#.#...#...#
|
||||||
|
.#.....##..#......##......###..
|
||||||
|
..#.#...#......#..#..##.#.....#
|
||||||
|
#....#..#.#..........#...#.....
|
||||||
|
.#......#.##..###..#.#....#..##
|
||||||
|
.......#.......#..#..#......#..
|
||||||
|
..##.....##.#..#..#.....##.....
|
||||||
|
........#.##...#.#.#..#..#..#..
|
||||||
|
...#.######.........#.....#..##
|
||||||
|
.#.#............#....#.........
|
||||||
|
#...#....###.#......#.#........
|
||||||
|
#.........#....#...##..........
|
||||||
|
....#...........#.###.#...###..
|
||||||
|
.........#........#.#.#..#...#.
|
||||||
|
.#.......#.#.....#.#.....#.##..
|
||||||
|
.....#.......#.....#.#.#.......
|
||||||
|
#.##..#..##.......#...#......#.
|
||||||
|
.###.....##...##.#...##.##.#.#.
|
||||||
|
...#......##..##............#.#
|
||||||
|
...#......................#..##
|
||||||
|
#..#..#................#...#...
|
||||||
|
#..#....#.#.#...##.......#..#..
|
||||||
|
....#.#..###.##...#..#.###..#..
|
||||||
|
..#...#....####.#............#.
|
||||||
|
......#....#.#...#.#.#.........
|
||||||
|
#...#........#.....##..###.#..#
|
||||||
|
#....#...#...##...#..#....##...
|
||||||
|
#..#...#..#.......#.#..##.#..#.
|
||||||
|
#.#..........#...........##....
|
||||||
|
.#...###...#......#.......#.#.#
|
||||||
|
.........#.........#...#...##..
|
||||||
|
##.#..###......##..#.....#..#..
|
||||||
|
....##...............#.....#...
|
||||||
|
.....#.....###.#.....#.#.......
|
||||||
|
....#..#......###..#..##..#....
|
||||||
|
......................#.....#..
|
||||||
|
..#..#...##....##....#........#
|
||||||
|
..#....#...#...#.......#.....#.
|
||||||
|
...##.#.#.##......#.#.#.#.####.
|
||||||
|
.###...#..#......#.#..#........
|
||||||
|
#..#...##.#..#..##..##....#...#
|
||||||
|
...#...#..#..#..#........#..##.
|
||||||
|
.##....#.##.#....#...#.#.#....#
|
||||||
|
#..#....#..#....#.......##..#.#
|
||||||
|
...#.#....####...........#...#.
|
||||||
|
#...#####...#.#..#......#...#.#
|
||||||
|
.##....#.#.#..#......#..##.....
|
||||||
|
..........#..#.#.#.....##......
|
||||||
|
.....#....#..................#.
|
||||||
|
.........#...#...#....#..###...
|
||||||
|
.#.#.#....#....................
|
||||||
|
......##............##.###..#..
|
||||||
|
#.#...#........####.##..#.#.##.
|
||||||
|
#........#.#.#.#..#.##.....#...
|
||||||
|
......####..#.##.......#....#..
|
||||||
|
.........#...#...#.....#.......
|
||||||
|
..##.....#...#...#.....##.....#
|
||||||
|
....#...##....#.....#..#..##.##
|
||||||
|
..#.........##...##..###..#....
|
||||||
|
#....#.#.........##.###.#...##.
|
||||||
|
.##...#....#..#..#.#....##.....
|
||||||
|
##..#..#..#...........#.##....#
|
||||||
|
....#..........#...#..#.....#..
|
||||||
|
........###..#..#.#.#.....##...
|
||||||
|
#...#...#..###............###..
|
||||||
|
..#.....#.#.#..#..#.#..#......#
|
||||||
|
..#...##..#....#...#......#....
|
||||||
|
#....#........##.....#..##....#
|
||||||
|
#.....#.#.#..#.......##.#.#.##.
|
||||||
|
..##...#...#.....#..........#..
|
||||||
|
##.....#....#......#..........#
|
||||||
|
......#..#..........#.#..####..
|
||||||
|
......#...#............##...##.
|
||||||
|
..#.......##.......#...###.###.
|
||||||
|
.#..#.#.#...#..##.#......#.#...
|
||||||
|
.##.....##.#.#...#.##.........#
|
||||||
|
#.#.######...........#.#####.#.
|
||||||
|
........#.##...##....##.#.##.#.
|
||||||
|
....#......#.....#.....###...##
|
||||||
|
#..............#.#....#.#....#.
|
||||||
|
....#..###.#.........##.#.#....
|
||||||
|
..#.#.#..##....####..........#.
|
||||||
|
...#..#.......#................
|
||||||
|
...#....#..............#....#..
|
||||||
|
.....#...#...#....#.#.#..#...#.
|
||||||
|
......##.............###.##..##
|
||||||
|
.#...#.#..#......#..#.##.......
|
||||||
|
##.....#.....#.##...#....#.....
|
||||||
|
..#..#.#.#.#.#..........#..###.
|
||||||
|
##..........#........#....#.#..
|
||||||
|
.....#...#........#.#..###....#
|
||||||
|
.###.#........#.##......#.#...#
|
||||||
|
#...##....#....#....##.#.#.....
|
||||||
|
.....#.#............#..........
|
||||||
|
..#.##....................#....
|
||||||
|
.....#..#..#.#..#.##.......#...
|
||||||
|
.....###......#......##......##
|
||||||
|
#.....#.#.......##.......#...#.
|
||||||
|
.#.#...#......#..###...#.....#.
|
||||||
|
#.#..#...#..##.....#...#.#..#..
|
||||||
|
.....#.#..........#..#.........
|
||||||
|
.###..##..##.....#...#...#..##.
|
||||||
|
#...#.#....#.......##..#.......
|
||||||
|
###...#.#.#..#.......#......#..
|
||||||
|
....##........#..........##....
|
||||||
|
............#....#...........#.
|
||||||
|
#..#.#....##..#.#..#......##...
|
||||||
|
.###....##...#....##..........#
|
||||||
|
.###........#........###.....#.
|
||||||
|
...#...#.#......#...#....#.....
|
||||||
|
.###.......#.........#.........
|
||||||
|
....##.#......#...###......##.#
|
||||||
|
.###...#..##.....##.......#....
|
||||||
|
.#.#...#..#.##....#........#...
|
11
2020/day3/sample.txt
Normal file
11
2020/day3/sample.txt
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
..##.......
|
||||||
|
#...#...#..
|
||||||
|
.#....#..#.
|
||||||
|
..#.#...#.#
|
||||||
|
.#...##..#.
|
||||||
|
..#.##.....
|
||||||
|
.#.#.#....#
|
||||||
|
.#........#
|
||||||
|
#.##...#...
|
||||||
|
#...##....#
|
||||||
|
.#..#...#.#
|
161
2020/day3/solution.s
Normal file
161
2020/day3/solution.s
Normal file
@ -0,0 +1,161 @@
|
|||||||
|
.global _start
|
||||||
|
_start:
|
||||||
|
mova stack_top,r0
|
||||||
|
mov r0,r15
|
||||||
|
|
||||||
|
_input:
|
||||||
|
mov.l start,r8
|
||||||
|
mov.l size,r9
|
||||||
|
|
||||||
|
/* returns stride in r1 */
|
||||||
|
mova _calculate_stride,r0
|
||||||
|
jsr @r0
|
||||||
|
mov r8,r1
|
||||||
|
|
||||||
|
mov r1,r10 /* r10: stride */
|
||||||
|
|
||||||
|
/* part 1 */
|
||||||
|
mov #3,r13 /* right 3 */
|
||||||
|
mov #1,r14 /* down 1 */
|
||||||
|
|
||||||
|
mova _solve,r0
|
||||||
|
jsr @r0
|
||||||
|
nop
|
||||||
|
|
||||||
|
ldc r7,gbr /* part1 answer */
|
||||||
|
|
||||||
|
/* part 2 */
|
||||||
|
mova part2_data,r0
|
||||||
|
mov r0,r4 /* r4: part2 data start */
|
||||||
|
mov #10,r3
|
||||||
|
add r4,r3 /* r3: part2 data end */
|
||||||
|
|
||||||
|
mov #1,r6 /* r6: tree multiplier */
|
||||||
|
|
||||||
|
part2_loop:
|
||||||
|
mov.b @r4+,r13 /* right */
|
||||||
|
mov.b @r4+,r14 /* down */
|
||||||
|
|
||||||
|
mova _solve,r0
|
||||||
|
jsr @r0
|
||||||
|
nop
|
||||||
|
|
||||||
|
dmulu.l r7,r6
|
||||||
|
cmp/eq r4,r3
|
||||||
|
bf/s part2_loop
|
||||||
|
sts macl,r6
|
||||||
|
|
||||||
|
/* part2 answer : mach,macl */
|
||||||
|
|
||||||
|
trapa #0
|
||||||
|
|
||||||
|
/* right, down */
|
||||||
|
.balign 4
|
||||||
|
part2_data:
|
||||||
|
.byte 1, 1
|
||||||
|
.byte 3, 1
|
||||||
|
.byte 5, 1
|
||||||
|
.byte 7, 1
|
||||||
|
.byte 1, 2
|
||||||
|
|
||||||
|
/* r7: number of trees (in/out) */
|
||||||
|
.balign 4
|
||||||
|
_solve:
|
||||||
|
/* initial state */
|
||||||
|
mov #0,r7 /* number of trees encountered */
|
||||||
|
mov #0,r11 /* position X */
|
||||||
|
mov #0,r12 /* position Y */
|
||||||
|
solve_loop:
|
||||||
|
/* return value in r1 */
|
||||||
|
sts.l pr,@-r15
|
||||||
|
mova _slope_step,r0
|
||||||
|
jsr @r0
|
||||||
|
nop
|
||||||
|
lds.l @r15+,pr
|
||||||
|
|
||||||
|
cmp/pz r1 /* r1 ≥ 0 */
|
||||||
|
bf solve_end /* this is the end */
|
||||||
|
bra solve_loop
|
||||||
|
add r1,r7 /* increment tree count */
|
||||||
|
|
||||||
|
solve_end:
|
||||||
|
rts
|
||||||
|
nop
|
||||||
|
|
||||||
|
.balign 4
|
||||||
|
_slope_step:
|
||||||
|
/* r11: position X */
|
||||||
|
/* r12: position Y */
|
||||||
|
/* r13: right N */
|
||||||
|
/* r14: down N */
|
||||||
|
/* r8 : start */
|
||||||
|
/* r9 : size */
|
||||||
|
/* r10: stride */
|
||||||
|
/* return r1 : tree encountered (-1,0,1) */
|
||||||
|
|
||||||
|
add r13,r11 /* r11 + r13 → r11 (X) */
|
||||||
|
add r14,r12 /* r12 + r14 → r12 (Y) */
|
||||||
|
|
||||||
|
/* Y-coordinate × stride → r5 */
|
||||||
|
mulu.w r10,r12 /* offset */
|
||||||
|
sts macl,r5
|
||||||
|
|
||||||
|
sts.l pr,@-r15
|
||||||
|
|
||||||
|
/* X-axis wrap-around */
|
||||||
|
mov r11,r1
|
||||||
|
mov r10,r0
|
||||||
|
add #-1,r0 /* subtract 1 to remove newline */
|
||||||
|
mov.l div32_16_ptr,r2
|
||||||
|
jsr @r2 /* r1 ÷ r0 → r1 ; (clobbers r0,r1) */
|
||||||
|
mov r0,r2 /* save width in r2 (not clobbered) */
|
||||||
|
|
||||||
|
lds.l @r15+,pr
|
||||||
|
|
||||||
|
/* recover the modulus with a multiplication + subtraction */
|
||||||
|
mulu.w r2,r1
|
||||||
|
sts macl,r1
|
||||||
|
mov r11,r0
|
||||||
|
sub r1,r0 /* r0 - r1 → r0
|
||||||
|
|
||||||
|
/* calculate offset (y_off + x_off → off) */
|
||||||
|
add r5,r0
|
||||||
|
/* compare r0 offset with r9 size */
|
||||||
|
cmp/hs r9,r0 /* r0 ≥ r9 → T */
|
||||||
|
bt end_of_slope
|
||||||
|
|
||||||
|
/* get tree */
|
||||||
|
mov.b @(r0,r8),r0
|
||||||
|
cmp/eq #0x23,r0 /* 0x23 ascii `#` */
|
||||||
|
rts
|
||||||
|
movt r1
|
||||||
|
end_of_slope:
|
||||||
|
rts
|
||||||
|
mov #-1,r1 /* -1: end of slope */
|
||||||
|
|
||||||
|
.balign 4
|
||||||
|
div32_16_ptr: .long _div32_16
|
||||||
|
|
||||||
|
.balign 4
|
||||||
|
_calculate_stride:
|
||||||
|
/* r8: const input start */
|
||||||
|
/* r1: input start (initialized by caller) */
|
||||||
|
/* return r1 : stride */
|
||||||
|
loop:
|
||||||
|
mov.b @r1+,r0
|
||||||
|
cmp/eq #0xa,r0 /* ascii space */
|
||||||
|
bf loop
|
||||||
|
sub r8,r1 /* r1 - r8 → r1 */
|
||||||
|
rts
|
||||||
|
nop
|
||||||
|
|
||||||
|
.balign 4
|
||||||
|
start: .long _binary_2020_day3_input_txt_start
|
||||||
|
size: .long _binary_2020_day3_input_txt_size
|
||||||
|
|
||||||
|
.balign 4
|
||||||
|
stack_bot:
|
||||||
|
.rept 16
|
||||||
|
.long 0
|
||||||
|
.endr
|
||||||
|
stack_top:
|
14
2020/deps.mk
14
2020/deps.mk
@ -4,8 +4,18 @@
|
|||||||
2020/day2/input.txt.o \
|
2020/day2/input.txt.o \
|
||||||
common/parse_base10.o
|
common/parse_base10.o
|
||||||
|
|
||||||
2020/day2/solution.elf:
|
|
||||||
2020/day2/solution.elf: $(2020_DAY2_OBJ)
|
2020/day2/solution.elf: $(2020_DAY2_OBJ)
|
||||||
$(DEFAULT_LINK)
|
$(DEFAULT_LINK)
|
||||||
|
|
||||||
ALL_ELF += 2020/day2/solution.elf
|
2020_DAY3_OBJ = \
|
||||||
|
2020/day3/solution.o \
|
||||||
|
2020/day3/sample.txt.o \
|
||||||
|
2020/day3/input.txt.o \
|
||||||
|
common/div32_16.o
|
||||||
|
|
||||||
|
2020/day3/solution.elf: $(2020_DAY3_OBJ)
|
||||||
|
$(DEFAULT_LINK)
|
||||||
|
|
||||||
|
ALL_ELF += \
|
||||||
|
2020/day2/solution.elf \
|
||||||
|
2020/day3/solution.elf
|
||||||
|
2
Makefile
2
Makefile
@ -61,7 +61,7 @@ endef
|
|||||||
clean:
|
clean:
|
||||||
find -P \
|
find -P \
|
||||||
-regextype posix-egrep \
|
-regextype posix-egrep \
|
||||||
-regex '.*\.(o|bin|elf|d)$$' \
|
-regex '.*\.(o|bin|elf|d|map)$$' \
|
||||||
-exec rm {} \;
|
-exec rm {} \;
|
||||||
|
|
||||||
.SUFFIXES:
|
.SUFFIXES:
|
||||||
|
18
common/div32_16.s
Normal file
18
common/div32_16.s
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
.global _div32_16
|
||||||
|
.align 4
|
||||||
|
_div32_16:
|
||||||
|
/* r1 (32 bits) ÷ r0 (16 bits) */
|
||||||
|
shll16 r0
|
||||||
|
cmp/hs r0,r1
|
||||||
|
bt over_div
|
||||||
|
div0u
|
||||||
|
.rept 16
|
||||||
|
div1 r0,r1
|
||||||
|
.endr
|
||||||
|
rotcl r1
|
||||||
|
rts
|
||||||
|
extu.w r1,r1
|
||||||
|
over_div:
|
||||||
|
bra over_div
|
||||||
|
nop
|
||||||
|
/* r1 = quotient */
|
Loading…
x
Reference in New Issue
Block a user