.text .attribute 4, 16 .attribute 5, "rv64i2p0_m2p0_a2p0_f2p0_d2p0_c2p0" .file "69_expr_eval.sy" .globl next_char .p2align 1 .type next_char,@function next_char: addi sp, sp, -16 sd ra, 8(sp) call getch lui a1, %hi(last_char) sw a0, %lo(last_char)(a1) ld ra, 8(sp) addi sp, sp, 16 ret .Lfunc_end0: .size next_char, .Lfunc_end0-next_char .globl is_space .p2align 1 .type is_space,@function is_space: addi a1, a0, -32 seqz a1, a1 addi a0, a0, -10 seqz a0, a0 or a0, a0, a1 ret .Lfunc_end1: .size is_space, .Lfunc_end1-is_space .globl is_num .p2align 1 .type is_num,@function is_num: addiw a0, a0, -48 sltiu a0, a0, 10 ret .Lfunc_end2: .size is_num, .Lfunc_end2-is_num .globl next_token .p2align 1 .type next_token,@function next_token: addi sp, sp, -48 sd ra, 40(sp) sd s0, 32(sp) sd s1, 24(sp) sd s2, 16(sp) sd s3, 8(sp) lui s0, %hi(last_char) lw a0, %lo(last_char)(s0) li s1, 32 li s2, 10 j .LBB3_2 .LBB3_1: call getch sw a0, %lo(last_char)(s0) .LBB3_2: sext.w a1, a0 beq a1, s1, .LBB3_1 beq a1, s2, .LBB3_1 addiw a1, a0, -58 li s1, -10 bgeu a1, s1, .LBB3_6 lui a1, %hi(other) sw a0, %lo(other)(a1) call getch lui a1, %hi(last_char) sw a0, %lo(last_char)(a1) li a0, 1 j .LBB3_10 .LBB3_6: addiw a0, a0, -48 lui s0, %hi(num) sw a0, %lo(num)(s0) call getch lui s2, %hi(last_char) addiw a1, a0, -58 sw a0, %lo(last_char)(s2) bltu a1, s1, .LBB3_9 li s3, 10 li s1, -10 .LBB3_8: lw a1, %lo(num)(s0) mulw a1, a1, s3 addw a0, a0, a1 addiw a0, a0, -48 sw a0, %lo(num)(s0) call getch addiw a1, a0, -58 sw a0, %lo(last_char)(s2) bgeu a1, s1, .LBB3_8 .LBB3_9: li a0, 0 .LBB3_10: lui a1, %hi(cur_token) sw a0, %lo(cur_token)(a1) ld ra, 40(sp) ld s0, 32(sp) ld s1, 24(sp) ld s2, 16(sp) ld s3, 8(sp) addi sp, sp, 48 ret .Lfunc_end3: .size next_token, .Lfunc_end3-next_token .globl panic .p2align 1 .type panic,@function panic: addi sp, sp, -16 sd ra, 8(sp) li a0, 112 call putch li a0, 97 call putch li a0, 110 call putch li a0, 105 call putch li a0, 99 call putch li a0, 33 call putch li a0, 10 call putch li a0, -1 ld ra, 8(sp) addi sp, sp, 16 ret .Lfunc_end4: .size panic, .Lfunc_end4-panic .globl get_op_prec .p2align 1 .type get_op_prec,@function get_op_prec: addiw a0, a0, -37 li a1, 10 bltu a1, a0, .LBB5_2 lui a1, %hi(.Lswitch.table.eval.1) addi a1, a1, %lo(.Lswitch.table.eval.1) slli a0, a0, 2 add a0, a0, a1 lw a0, 0(a0) ret .LBB5_2: li a0, 0 ret .Lfunc_end5: .size get_op_prec, .Lfunc_end5-get_op_prec .globl stack_push .p2align 1 .type stack_push,@function stack_push: lw a2, 0(a0) addiw a2, a2, 1 sw a2, 0(a0) slli a2, a2, 2 add a0, a0, a2 sw a1, 0(a0) ret .Lfunc_end6: .size stack_push, .Lfunc_end6-stack_push .globl stack_pop .p2align 1 .type stack_pop,@function stack_pop: lw a2, 0(a0) slli a1, a2, 2 add a1, a1, a0 lw a1, 0(a1) addiw a2, a2, -1 sw a2, 0(a0) mv a0, a1 ret .Lfunc_end7: .size stack_pop, .Lfunc_end7-stack_pop .globl stack_peek .p2align 1 .type stack_peek,@function stack_peek: lw a1, 0(a0) slli a1, a1, 2 add a0, a0, a1 lw a0, 0(a0) ret .Lfunc_end8: .size stack_peek, .Lfunc_end8-stack_peek .globl stack_size .p2align 1 .type stack_size,@function stack_size: lw a0, 0(a0) ret .Lfunc_end9: .size stack_size, .Lfunc_end9-stack_size .globl eval_op .p2align 1 .type eval_op,@function eval_op: addi a3, a0, -37 li a4, 10 li a0, 0 bltu a4, a3, .LBB10_3 slli a3, a3, 2 lui a4, %hi(.LJTI10_0) addi a4, a4, %lo(.LJTI10_0) add a3, a3, a4 lw a3, 0(a3) jr a3 .LBB10_2: remw a0, a1, a2 .LBB10_3: ret .LBB10_4: mulw a0, a2, a1 ret .LBB10_5: addw a0, a2, a1 ret .LBB10_6: subw a0, a1, a2 ret .LBB10_7: divw a0, a1, a2 ret .Lfunc_end10: .size eval_op, .Lfunc_end10-eval_op .section .rodata,"a",@progbits .p2align 2 .LJTI10_0: .word .LBB10_2 .word .LBB10_3 .word .LBB10_3 .word .LBB10_3 .word .LBB10_3 .word .LBB10_4 .word .LBB10_5 .word .LBB10_3 .word .LBB10_6 .word .LBB10_3 .word .LBB10_7 .text .globl eval .p2align 1 .type eval,@function eval: addi sp, sp, -2032 sd ra, 2024(sp) sd s0, 2016(sp) sd s1, 2008(sp) sd s2, 2000(sp) sd s3, 1992(sp) sd s4, 1984(sp) sd s5, 1976(sp) sd s6, 1968(sp) sd s7, 1960(sp) sd s8, 1952(sp) sd s9, 1944(sp) sd s10, 1936(sp) sd s11, 1928(sp) addi sp, sp, -144 addi a0, sp, 1056 li a2, 1016 li a1, 0 call memset@plt addi a0, sp, 24 li a2, 1024 li a1, 0 call memset@plt lui a0, %hi(cur_token) lw a0, %lo(cur_token)(a0) beqz a0, .LBB11_2 .LBB11_1: li a0, 112 call putch li a0, 97 call putch li a0, 110 call putch li a0, 105 call putch li a0, 99 call putch li a0, 33 call putch li a0, 10 call putch li a0, -1 srli a0, a0, 32 j .LBB11_66 .LBB11_2: lui a0, %hi(num) lw a1, %lo(num)(a0) li a0, 1 sw a0, 1048(sp) lui s0, %hi(last_char) lw a0, %lo(last_char)(s0) sw a1, 1052(sp) li s1, 32 li s2, 10 j .LBB11_4 .LBB11_3: call getch sw a0, %lo(last_char)(s0) .LBB11_4: sext.w a1, a0 beq a1, s1, .LBB11_3 beq a1, s2, .LBB11_3 addiw a1, a0, -58 li s7, -10 bgeu a1, s7, .LBB11_39 lui s0, %hi(other) sw a0, %lo(other)(s0) call getch lui s2, %hi(last_char) sw a0, %lo(last_char)(s2) lui a1, %hi(cur_token) li a2, 1 sw a2, %lo(cur_token)(a1) li a1, 1377 slli a1, a1, 37 sd a1, 16(sp) li s6, 32 li s8, 10 lui s10, %hi(num) addi s11, sp, 1048 lui a1, %hi(.Lswitch.table.eval.1) addi s5, a1, %lo(.Lswitch.table.eval.1) lui a1, %hi(.LJTI11_0) addi s9, a1, %lo(.LJTI11_0) lw s3, %lo(other)(s0) li a1, 47 bltu a1, s3, .LBB11_46 .LBB11_8: sll a1, a2, s3 ld a2, 16(sp) and a1, a1, a2 bnez a1, .LBB11_10 j .LBB11_46 .LBB11_9: call getch sw a0, %lo(last_char)(s2) .LBB11_10: sext.w a1, a0 beq a1, s6, .LBB11_9 beq a1, s8, .LBB11_9 addiw a1, a0, -58 bgeu a1, s7, .LBB11_14 sw a0, %lo(other)(s0) call getch li s4, 0 sw a0, %lo(last_char)(s2) li a2, 1 lw a1, 24(sp) lui a3, %hi(cur_token) sw a2, %lo(cur_token)(a3) bnez a1, .LBB11_17 j .LBB11_31 .LBB11_14: addiw a0, a0, -48 sw a0, %lo(num)(s10) call getch sw a0, %lo(last_char)(s2) addiw a1, a0, -58 li s4, 1 bltu a1, s7, .LBB11_16 .LBB11_15: lw a1, %lo(num)(s10) mulw a1, a1, s8 addw a0, a0, a1 addiw a0, a0, -48 sw a0, %lo(num)(s10) call getch addiw a1, a0, -58 sw a0, %lo(last_char)(s2) bgeu a1, s7, .LBB11_15 .LBB11_16: li a2, 0 lw a1, 24(sp) lui a3, %hi(cur_token) sw a2, %lo(cur_token)(a3) beqz a1, .LBB11_31 .LBB11_17: addiw a7, s3, -37 slli a2, a7, 2 add a6, a2, s5 slli a2, a1, 2 addi a3, sp, 24 add a4, a3, a2 j .LBB11_20 .LBB11_18: remw a3, s0, a2 .LBB11_19: addi a1, a1, -1 sw a3, 0(a5) sext.w a2, a1 addi a4, a4, -4 beqz a2, .LBB11_31 .LBB11_20: lw a5, 0(a4) addiw a2, a5, -37 bltu s8, a2, .LBB11_23 slli a2, a2, 2 add a2, a2, s5 lw a3, 0(a2) bgeu s8, a7, .LBB11_24 .LBB11_22: li a2, 0 bgeu a3, a2, .LBB11_25 j .LBB11_32 .LBB11_23: li a3, 0 bltu s8, a7, .LBB11_22 .LBB11_24: lw a2, 0(a6) bltu a3, a2, .LBB11_32 .LBB11_25: lw s0, 1048(sp) li a3, 0 slli a2, s0, 2 add a2, a2, s11 lw a2, 0(a2) addiw s0, s0, -1 sw s0, 1048(sp) slli s1, s0, 2 addi s0, a5, -37 add a5, s11, s1 bltu s8, s0, .LBB11_19 slli s1, s0, 2 add s1, s1, s9 lw s1, 0(s1) lw s0, 0(a5) jr s1 .LBB11_27: mulw a3, s0, a2 j .LBB11_19 .LBB11_28: addw a3, s0, a2 j .LBB11_19 .LBB11_29: subw a3, s0, a2 j .LBB11_19 .LBB11_30: divw a3, s0, a2 j .LBB11_19 .LBB11_31: li a1, 0 .LBB11_32: addiw a1, a1, 1 sw a1, 24(sp) slli a1, a1, 2 addi a2, sp, 24 add a1, a1, a2 sw s3, 0(a1) beqz s4, .LBB11_1 lw a1, 1048(sp) lw a2, %lo(num)(s10) addiw a1, a1, 1 sw a1, 1048(sp) slli a1, a1, 2 add a1, a1, s11 sw a2, 0(a1) lui s0, %hi(other) j .LBB11_35 .LBB11_34: call getch sw a0, %lo(last_char)(s2) .LBB11_35: sext.w a1, a0 beq a1, s6, .LBB11_34 beq a1, s8, .LBB11_34 addiw a1, a0, -58 bgeu a1, s7, .LBB11_42 sw a0, %lo(other)(s0) call getch sw a0, %lo(last_char)(s2) lui a1, %hi(cur_token) li a2, 1 sw a2, %lo(cur_token)(a1) lw s3, %lo(other)(s0) li a1, 47 bgeu a1, s3, .LBB11_8 j .LBB11_46 .LBB11_39: addiw a0, a0, -48 lui s0, %hi(num) sw a0, %lo(num)(s0) call getch lui s2, %hi(last_char) addiw a1, a0, -58 sw a0, %lo(last_char)(s2) bltu a1, s7, .LBB11_45 li s3, 10 li s1, -10 .LBB11_41: lw a1, %lo(num)(s0) mulw a1, a1, s3 addw a0, a0, a1 addiw a0, a0, -48 sw a0, %lo(num)(s0) call getch addiw a1, a0, -58 sw a0, %lo(last_char)(s2) bgeu a1, s1, .LBB11_41 j .LBB11_45 .LBB11_42: addiw a0, a0, -48 lui s0, %hi(num) sw a0, %lo(num)(s0) call getch lui s2, %hi(last_char) addiw a1, a0, -58 li a2, -10 sw a0, %lo(last_char)(s2) bltu a1, a2, .LBB11_45 li s3, 10 li s1, -11 .LBB11_44: lw a1, %lo(num)(s0) mulw a1, a1, s3 addw a0, a0, a1 addiw a0, a0, -48 sw a0, %lo(num)(s0) call getch addiw a1, a0, -58 sw a0, %lo(last_char)(s2) bltu s1, a1, .LBB11_44 .LBB11_45: lui a1, %hi(cur_token) sw zero, %lo(cur_token)(a1) .LBB11_46: li s0, 32 lui s1, %hi(last_char) li s2, 10 j .LBB11_48 .LBB11_47: call getch sw a0, %lo(last_char)(s1) .LBB11_48: sext.w a1, a0 beq a1, s0, .LBB11_47 beq a1, s2, .LBB11_47 addiw a1, a0, -58 li s1, -10 bgeu a1, s1, .LBB11_52 lui a1, %hi(other) sw a0, %lo(other)(a1) call getch lui a1, %hi(last_char) sw a0, %lo(last_char)(a1) li a0, 1 lw a1, 24(sp) lui a2, %hi(cur_token) sw a0, %lo(cur_token)(a2) bnez a1, .LBB11_56 j .LBB11_65 .LBB11_52: addiw a0, a0, -48 lui s0, %hi(num) sw a0, %lo(num)(s0) call getch lui s2, %hi(last_char) addiw a1, a0, -58 sw a0, %lo(last_char)(s2) bltu a1, s1, .LBB11_55 li s3, 10 li s1, -10 .LBB11_54: lw a1, %lo(num)(s0) mulw a1, a1, s3 addw a0, a0, a1 addiw a0, a0, -48 sw a0, %lo(num)(s0) call getch addiw a1, a0, -58 sw a0, %lo(last_char)(s2) bgeu a1, s1, .LBB11_54 .LBB11_55: li a0, 0 lw a1, 24(sp) lui a2, %hi(cur_token) sw a0, %lo(cur_token)(a2) beqz a1, .LBB11_65 .LBB11_56: slli a0, a1, 2 addi a2, sp, 24 add a0, a0, a2 addi a1, a1, -1 addi a2, sp, 1048 li a6, 10 lui a3, %hi(.LJTI11_1) addi a7, a3, %lo(.LJTI11_1) j .LBB11_59 .LBB11_57: remw s1, a3, s0 .LBB11_58: sw s1, 0(a5) sext.w a3, a1 addi a0, a0, -4 addi a1, a1, -1 beqz a3, .LBB11_65 .LBB11_59: lw a3, 1048(sp) li s1, 0 lw a5, 0(a0) slli s0, a3, 2 add s0, s0, a2 lw s0, 0(s0) addiw a3, a3, -1 sw a3, 1048(sp) slli a4, a3, 2 addi a3, a5, -37 add a5, a2, a4 bltu a6, a3, .LBB11_58 slli a3, a3, 2 add a3, a3, a7 lw a4, 0(a3) lw a3, 0(a5) jr a4 .LBB11_61: mulw s1, a3, s0 j .LBB11_58 .LBB11_62: addw s1, a3, s0 j .LBB11_58 .LBB11_63: subw s1, a3, s0 j .LBB11_58 .LBB11_64: divw s1, a3, s0 j .LBB11_58 .LBB11_65: lw a0, 1048(sp) slli a0, a0, 2 addi a1, sp, 1048 add a0, a0, a1 lw a0, 0(a0) .LBB11_66: sext.w a0, a0 addi sp, sp, 144 ld ra, 2024(sp) ld s0, 2016(sp) ld s1, 2008(sp) ld s2, 2000(sp) ld s3, 1992(sp) ld s4, 1984(sp) ld s5, 1976(sp) ld s6, 1968(sp) ld s7, 1960(sp) ld s8, 1952(sp) ld s9, 1944(sp) ld s10, 1936(sp) ld s11, 1928(sp) addi sp, sp, 2032 ret .Lfunc_end11: .size eval, .Lfunc_end11-eval .section .rodata,"a",@progbits .p2align 2 .LJTI11_0: .word .LBB11_18 .word .LBB11_19 .word .LBB11_19 .word .LBB11_19 .word .LBB11_19 .word .LBB11_27 .word .LBB11_28 .word .LBB11_19 .word .LBB11_29 .word .LBB11_19 .word .LBB11_30 .LJTI11_1: .word .LBB11_57 .word .LBB11_58 .word .LBB11_58 .word .LBB11_58 .word .LBB11_58 .word .LBB11_61 .word .LBB11_62 .word .LBB11_58 .word .LBB11_63 .word .LBB11_58 .word .LBB11_64 .text .globl main .p2align 1 .type main,@function main: addi sp, sp, -48 sd ra, 40(sp) sd s0, 32(sp) sd s1, 24(sp) sd s2, 16(sp) sd s3, 8(sp) sd s4, 0(sp) call getint mv s0, a0 call getch lui s2, %hi(last_char) lw a0, %lo(last_char)(s2) li s1, 32 li s3, 10 j .LBB12_2 .LBB12_1: call getch sw a0, %lo(last_char)(s2) .LBB12_2: sext.w a1, a0 beq a1, s1, .LBB12_1 beq a1, s3, .LBB12_1 addiw a1, a0, -58 li s3, -10 bgeu a1, s3, .LBB12_8 lui a1, %hi(other) sw a0, %lo(other)(a1) call getch lui a1, %hi(last_char) sw a0, %lo(last_char)(a1) li a0, 1 lui a1, %hi(cur_token) sw a0, %lo(cur_token)(a1) beqz s0, .LBB12_7 .LBB12_6: call eval call putint li a0, 10 call putch addiw s0, s0, -1 bnez s0, .LBB12_6 .LBB12_7: li a0, 0 ld ra, 40(sp) ld s0, 32(sp) ld s1, 24(sp) ld s2, 16(sp) ld s3, 8(sp) ld s4, 0(sp) addi sp, sp, 48 ret .LBB12_8: addiw a0, a0, -48 lui s1, %hi(num) sw a0, %lo(num)(s1) call getch lui s2, %hi(last_char) addiw a1, a0, -58 sw a0, %lo(last_char)(s2) bltu a1, s3, .LBB12_11 li s3, 10 li s4, -10 .LBB12_10: lw a1, %lo(num)(s1) mulw a1, a1, s3 addw a0, a0, a1 addiw a0, a0, -48 sw a0, %lo(num)(s1) call getch addiw a1, a0, -58 sw a0, %lo(last_char)(s2) bgeu a1, s4, .LBB12_10 .LBB12_11: li a0, 0 lui a1, %hi(cur_token) sw a0, %lo(cur_token)(a1) bnez s0, .LBB12_6 j .LBB12_7 .Lfunc_end12: .size main, .Lfunc_end12-main .type TOKEN_NUM,@object .section .rodata,"a",@progbits .globl TOKEN_NUM .p2align 2 TOKEN_NUM: .word 0 .size TOKEN_NUM, 4 .type TOKEN_OTHER,@object .globl TOKEN_OTHER .p2align 2 TOKEN_OTHER: .word 1 .size TOKEN_OTHER, 4 .type last_char,@object .section .sdata,"aw",@progbits .globl last_char .p2align 2 last_char: .word 32 .size last_char, 4 .type num,@object .section .sbss,"aw",@nobits .globl num .p2align 2 num: .word 0 .size num, 4 .type cur_token,@object .globl cur_token .p2align 2 cur_token: .word 0 .size cur_token, 4 .type other,@object .globl other .p2align 2 other: .word 0 .size other, 4 .type _sysy_start,@object .bss .globl _sysy_start .p2align 3 _sysy_start: .zero 16 .size _sysy_start, 16 .type _sysy_end,@object .globl _sysy_end .p2align 3 _sysy_end: .zero 16 .size _sysy_end, 16 .type _sysy_l1,@object .globl _sysy_l1 .p2align 2 _sysy_l1: .zero 4096 .size _sysy_l1, 4096 .type _sysy_l2,@object .globl _sysy_l2 .p2align 2 _sysy_l2: .zero 4096 .size _sysy_l2, 4096 .type _sysy_h,@object .globl _sysy_h .p2align 2 _sysy_h: .zero 4096 .size _sysy_h, 4096 .type _sysy_m,@object .globl _sysy_m .p2align 2 _sysy_m: .zero 4096 .size _sysy_m, 4096 .type _sysy_s,@object .globl _sysy_s .p2align 2 _sysy_s: .zero 4096 .size _sysy_s, 4096 .type _sysy_us,@object .globl _sysy_us .p2align 2 _sysy_us: .zero 4096 .size _sysy_us, 4096 .type _sysy_idx,@object .section .sbss,"aw",@nobits .globl _sysy_idx .p2align 2 _sysy_idx: .word 0 .size _sysy_idx, 4 .type .Lswitch.table.eval.1,@object .section .rodata,"a",@progbits .p2align 2 .Lswitch.table.eval.1: .word 20 .word 0 .word 0 .word 0 .word 0 .word 20 .word 10 .word 0 .word 10 .word 0 .word 20 .size .Lswitch.table.eval.1, 44 .ident "Debian clang version 14.0.6" .section ".note.GNU-stack","",@progbits .addrsig