add day1
This commit is contained in:
commit
bfbd6830a8
126
day1.s
Normal file
126
day1.s
Normal file
@ -0,0 +1,126 @@
|
||||
.global _start
|
||||
_start:
|
||||
mov #0,r0
|
||||
lds r0,fpscr /* single-precision mode */
|
||||
|
||||
parse_lines:
|
||||
|
||||
_pointers:
|
||||
mova input_start,r0
|
||||
mov r0,r14 /* r14: pointer to input start */
|
||||
mov.l input_end,r0
|
||||
mov r0,r15 /* r15: pointer to input end */
|
||||
|
||||
_constants:
|
||||
fldi1 fr1 /* fr1: const 1 */
|
||||
fldi1 fr2
|
||||
fneg fr2 /* fr2: const -1 */
|
||||
fldi0 fr3 /* fr3: const 0 */
|
||||
|
||||
_accumulator:
|
||||
fldi0 fr9 /* fr9: sum of all values */
|
||||
|
||||
_ascii_characters:
|
||||
/* alternative sequence
|
||||
mov #'\n',r10
|
||||
lds r10,fpul
|
||||
float fpul,fr10 /* fr10: newline (10) /
|
||||
mov #('0'-1),r10
|
||||
lds r10,fpul
|
||||
float fpul,fr11 /* fr11: zero-1 (47) /
|
||||
mov #'9',r10
|
||||
lds r10,fpul
|
||||
float fpul,fr12 /* fr12: nine (57) /
|
||||
fmov fr11,fr13
|
||||
fadd fr1,fr13 /* fr13: zero (48) /
|
||||
*/
|
||||
|
||||
/* the less efficient sequence that uses more floating point
|
||||
/* instructions: */
|
||||
mova _ascii_newline,r0
|
||||
fmov.s @r0+,fr0
|
||||
flds fr0,fpul
|
||||
float fpul,fr10 /* fr10: newline (10) */
|
||||
fmov.s @r0+,fr0
|
||||
flds fr0,fpul
|
||||
float fpul,fr11 /* fr11: zero (48) */
|
||||
fmov fr11,fr12
|
||||
fsub fr1,fr12 /* fr12: zero-1 (47) */
|
||||
fmov.s @r0+,fr0
|
||||
flds fr0,fpul
|
||||
float fpul,fr13 /* fr13: nine (57) */
|
||||
|
||||
bra parse_line
|
||||
nop
|
||||
|
||||
.align 4
|
||||
_ascii_newline:
|
||||
.byte '\n', 0, 0, 0
|
||||
_ascii_zero:
|
||||
.byte '0' , 0, 0, 0
|
||||
_ascii_nine:
|
||||
.byte '9' , 0, 0, 0
|
||||
|
||||
parse_line:
|
||||
_parse_line_init:
|
||||
fldi1 fr14
|
||||
fneg fr14 /* fr14: digit0 (-1) */
|
||||
fldi1 fr15
|
||||
fneg fr15 /* fr15: digit1 (-1) */
|
||||
_parse_line_loop:
|
||||
mov.b @r14+,r1 /* r1 = *r14++ */
|
||||
lds r1,fpul
|
||||
float fpul,fr0 /* fr0 = (float)r1 */
|
||||
fcmp/eq fr0,fr10 /* fr0 == '\n' */
|
||||
bt _parse_line_loop_exit
|
||||
fcmp/eq fr3,fr10 /* fr0 == 0 */
|
||||
bt _parse_line_loop_exit
|
||||
|
||||
parse_num:
|
||||
fcmp/gt fr12,fr0 /* fr0 >= '0' */
|
||||
bf _parse_line_loop
|
||||
fcmp/gt fr13,fr0 /* fr0 > '9' */
|
||||
bt _parse_line_loop
|
||||
|
||||
fsub fr11,fr0 /* fr0 -= '0' */
|
||||
fcmp/eq fr14,fr2 /* fr14 == -1 */
|
||||
bf _first_seen
|
||||
fmov fr0,fr14
|
||||
_first_seen:
|
||||
fmov fr0,fr15
|
||||
|
||||
bra _parse_line_loop
|
||||
nop
|
||||
|
||||
_parse_line_loop_exit:
|
||||
fcmp/eq fr14,fr2
|
||||
bt _parse_line_empty_line
|
||||
/* coincidentally, ascii newline is also 10, which is exactly
|
||||
/* the desired constant here */
|
||||
fmul fr10,fr14 /* fr14 *= 10 */
|
||||
fadd fr14,fr9
|
||||
fadd fr15,fr9
|
||||
|
||||
_parse_line_empty_line:
|
||||
_parse_line_next_line:
|
||||
cmp/eq r14,r15
|
||||
bf parse_line
|
||||
|
||||
loop:
|
||||
bra loop
|
||||
nop
|
||||
|
||||
.align 4
|
||||
sample_input_start:
|
||||
.ascii "1abc2\n"
|
||||
.ascii "pqr3stu8vwx\n"
|
||||
.ascii "a1b2c3d4e5f\n"
|
||||
.ascii "treb7uchet\n"
|
||||
.align 4, '\n'
|
||||
sample_input_end:
|
||||
|
||||
input_end:
|
||||
.long _input_end
|
||||
input_start:
|
||||
.incbin "input.txt"
|
||||
_input_end:
|
5
gdb.script
Normal file
5
gdb.script
Normal file
@ -0,0 +1,5 @@
|
||||
target extended-remote localhost:1234
|
||||
tui enable
|
||||
tui layout regs
|
||||
tui focus cmd
|
||||
tui reg all
|
Loading…
x
Reference in New Issue
Block a user