.file "69_expr_eval.sy" .option pic .attribute arch, "rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0" .attribute unaligned_access, 0 .attribute stack_align, 16 .text .align 1 .globl next_char .type next_char, @function next_char: addi sp,sp,-16 sd ra,8(sp) call getch@plt ld ra,8(sp) sw a0,.LANCHOR0,a4 addi sp,sp,16 jr ra .size next_char, .-next_char .align 1 .globl is_space .type is_space, @function is_space: li a5,32 beq a0,a5,.L6 addi a0,a0,-10 seqz a0,a0 ret .L6: li a0,1 ret .size is_space, .-is_space .align 1 .globl is_num .type is_num, @function is_num: addiw a0,a0,-48 sltiu a0,a0,10 ret .size is_num, .-is_num .align 1 .globl next_token .type next_token, @function next_token: addi sp,sp,-32 sd s0,16(sp) lla s0,.LANCHOR0 lw a0,0(s0) sd s1,8(sp) sd s2,0(sp) sd ra,24(sp) li s1,32 li s2,10 .L9: beq a0,s1,.L10 beq a0,s2,.L10 addiw a5,a0,-48 li a4,9 lla s1,.LANCHOR1 bleu a5,a4,.L11 sw a0,0(s1) call getch@plt sw a0,0(s0) ld ra,24(sp) ld s0,16(sp) li a0,1 sw a0,8(s1) ld s2,0(sp) ld s1,8(sp) addi sp,sp,32 jr ra .L10: call getch@plt sw a0,0(s0) j .L9 .L11: sw a5,4(s1) call getch@plt li s2,9 sw a0,0(s0) addiw a5,a0,-48 bgtu a5,s2,.L14 .L16: lw a4,4(s1) slliw a5,a4,2 addw a5,a5,a4 slliw a5,a5,1 addw a5,a5,a0 addiw a5,a5,-48 sw a5,4(s1) call getch@plt sw a0,0(s0) addiw a5,a0,-48 bleu a5,s2,.L16 .L14: ld ra,24(sp) ld s0,16(sp) li a0,0 sw a0,8(s1) ld s2,0(sp) ld s1,8(sp) addi sp,sp,32 jr ra .size next_token, .-next_token .align 1 .globl panic .type panic, @function panic: addi sp,sp,-16 li a0,112 sd ra,8(sp) call putch@plt li a0,97 call putch@plt li a0,110 call putch@plt li a0,105 call putch@plt li a0,99 call putch@plt li a0,33 call putch@plt li a0,10 call putch@plt ld ra,8(sp) li a0,-1 addi sp,sp,16 jr ra .size panic, .-panic .align 1 .globl get_op_prec .type get_op_prec, @function get_op_prec: addiw a0,a0,-37 li a5,10 bgtu a0,a5,.L21 li a5,1 sll a5,a5,a0 andi a4,a5,1057 li a0,20 bne a4,zero,.L20 andi a0,a5,320 snez a0,a0 neg a0,a0 andi a0,a0,10 ret .L21: li a0,0 .L20: ret .size get_op_prec, .-get_op_prec .align 1 .globl stack_push .type stack_push, @function stack_push: lw a5,0(a0) addiw a4,a5,1 mv a5,a4 slli a4,a4,2 sw a5,0(a0) add a0,a0,a4 sw a1,0(a0) ret .size stack_push, .-stack_push .align 1 .globl stack_pop .type stack_pop, @function stack_pop: lw a4,0(a0) mv a5,a0 slli a3,a4,2 add a3,a0,a3 addiw a4,a4,-1 lw a0,0(a3) sw a4,0(a5) ret .size stack_pop, .-stack_pop .align 1 .globl stack_peek .type stack_peek, @function stack_peek: lw a5,0(a0) slli a5,a5,2 add a0,a0,a5 lw a0,0(a0) ret .size stack_peek, .-stack_peek .align 1 .globl stack_size .type stack_size, @function stack_size: lw a0,0(a0) ret .size stack_size, .-stack_size .align 1 .globl eval_op .type eval_op, @function eval_op: addiw a5,a0,-37 sext.w a3,a5 li a4,10 bgtu a3,a4,.L36 slli a3,a5,32 lla a4,.L31 srli a5,a3,30 add a5,a5,a4 lw a5,0(a5) add a5,a5,a4 jr a5 .section .rodata .align 2 .align 2 .L31: .word .L35-.L31 .word .L36-.L31 .word .L36-.L31 .word .L36-.L31 .word .L36-.L31 .word .L34-.L31 .word .L33-.L31 .word .L36-.L31 .word .L32-.L31 .word .L36-.L31 .word .L30-.L31 .text .L36: li a0,0 ret .L30: divw a0,a1,a2 ret .L35: remw a0,a1,a2 ret .L34: mulw a0,a1,a2 ret .L33: addw a0,a1,a2 ret .L32: subw a0,a1,a2 ret .size eval_op, .-eval_op .align 1 .globl eval .type eval, @function eval: addi sp,sp,-112 sd ra,104(sp) sd s1,88(sp) sd s3,72(sp) sd s6,48(sp) sd s0,96(sp) sd s2,80(sp) sd s4,64(sp) sd s5,56(sp) sd s7,40(sp) sd s8,32(sp) sd s9,24(sp) addi sp,sp,-2032 mv s3,sp li a2,1024 li a1,0 mv a0,s3 call memset@plt addi s1,sp,1024 li a2,1024 li a1,0 mv a0,s1 lla s6,.LANCHOR1 call memset@plt lw a5,8(s6) bne a5,zero,.L57 lw a5,4(s6) li s8,1 sw s8,0(sp) sw a5,4(sp) call next_token lw s2,8(s6) li s0,0 li s4,10 li s7,1 lla s5,.L50 bne s2,s8,.L92 .L40: lw s8,0(s6) addiw s9,s8,-37 bgtu s9,s4,.L91 li a5,1377 srl a5,a5,s9 andi a5,a5,1 bne a5,zero,.L43 .L91: lw s4,0(sp) slli s2,s4,2 mv s5,s2 call next_token beq s0,zero,.L41 slli a5,s0,2 add s1,s1,a5 li a0,10 lla a1,.L60 .L66: lw a5,0(s1) li a4,4096 addi a4,a4,-2048 add a4,a4,s2 add a4,a4,sp addiw s0,s0,-1 addiw s4,s4,-1 addi s2,s2,-4 addiw a5,a5,-37 lw a2,-2048(a4) add s2,s3,s2 sw s4,0(sp) sw s0,1024(sp) sext.w a3,a5 lw a4,0(s2) bgtu a3,a0,.L71 slli a3,a5,32 srli a5,a3,30 add a5,a5,a1 lw a5,0(a5) add a5,a5,a1 jr a5 .section .rodata .align 2 .align 2 .L60: .word .L64-.L60 .word .L71-.L60 .word .L71-.L60 .word .L71-.L60 .word .L71-.L60 .word .L63-.L60 .word .L62-.L60 .word .L71-.L60 .word .L61-.L60 .word .L71-.L60 .word .L59-.L60 .text .L71: li a5,0 .L58: sw a5,0(s2) addi s1,s1,-4 beq s0,zero,.L93 .L65: lw s4,0(sp) slli s2,s4,2 j .L66 .L59: divw a5,a4,a2 addi s1,s1,-4 sw a5,0(s2) bne s0,zero,.L65 .L93: lw s5,0(sp) slli s5,s5,2 .L41: li a5,4096 addi a5,a5,-2048 add a5,a5,s5 add s5,a5,sp lw a0,-2048(s5) .L89: addi sp,sp,2032 ld ra,104(sp) ld s0,96(sp) ld s1,88(sp) ld s2,80(sp) ld s3,72(sp) ld s4,64(sp) ld s5,56(sp) ld s6,48(sp) ld s7,40(sp) ld s8,32(sp) ld s9,24(sp) addi sp,sp,112 jr ra .L61: subw a5,a4,a2 j .L58 .L62: addw a5,a4,a2 j .L58 .L63: mulw a5,a4,a2 j .L58 .L64: remw a5,a4,a2 j .L58 .L43: call next_token beq s0,zero,.L45 sll a0,s7,s9 slli a1,s0,2 andi a6,a0,1057 add a1,s1,a1 andi a0,a0,320 .L46: lw a5,0(a1) addiw a5,a5,-37 sext.w a4,a5 bgtu a4,s4,.L55 sll a4,s7,a4 andi a3,a4,1057 bne a3,zero,.L56 andi a4,a4,320 bne a4,zero,.L94 .L55: bne a6,zero,.L68 bne a0,zero,.L68 .L56: lw a3,0(sp) li a2,4096 addi a2,a2,-2048 slli a4,a3,2 add a2,a2,a4 add a2,a2,sp addiw a3,a3,-1 addiw s0,s0,-1 addi a4,a4,-4 lw a7,-2048(a2) add a4,s3,a4 sw a3,0(sp) sw s0,1024(sp) sext.w a2,a5 lw a3,0(a4) bgtu a2,s4,.L70 slli a2,a5,32 srli a5,a2,30 add a5,a5,s5 lw a5,0(a5) add a5,a5,s5 jr a5 .section .rodata .align 2 .align 2 .L50: .word .L54-.L50 .word .L70-.L50 .word .L70-.L50 .word .L70-.L50 .word .L70-.L50 .word .L53-.L50 .word .L52-.L50 .word .L70-.L50 .word .L51-.L50 .word .L70-.L50 .word .L49-.L50 .text .L70: li a5,0 .L48: sw a5,0(a4) addi a1,a1,-4 bne s0,zero,.L46 .L45: mv s0,s2 li a5,4 .L47: li a2,4096 addi a3,a2,-2048 add a3,a3,a5 lw a4,8(s6) sw s0,1024(sp) add a5,a3,sp sw s8,-1024(a5) bne a4,zero,.L57 lw a4,0(sp) lw a3,4(s6) addiw a5,a4,1 mv a4,a5 sw a4,0(sp) slli a5,a5,2 addi a4,a2,-2048 add a4,a4,a5 add a5,a4,sp sw a3,-2048(a5) call next_token lw a5,8(s6) lw s0,1024(sp) beq a5,s7,.L40 j .L91 .L94: beq a6,zero,.L56 .L68: addiw s0,s0,1 slli a5,s0,2 j .L47 .L51: subw a5,a3,a7 j .L48 .L52: addw a5,a3,a7 j .L48 .L53: mulw a5,a3,a7 j .L48 .L54: remw a5,a3,a7 j .L48 .L49: divw a5,a3,a7 j .L48 .L57: li a0,112 call putch@plt li a0,97 call putch@plt li a0,110 call putch@plt li a0,105 call putch@plt li a0,99 call putch@plt li a0,33 call putch@plt li a0,10 call putch@plt li a0,-1 j .L89 .L92: call next_token li s5,4 j .L41 .size eval, .-eval .section .text.startup,"ax",@progbits .align 1 .globl main .type main, @function main: addi sp,sp,-16 sd ra,8(sp) sd s0,0(sp) call getint@plt mv s0,a0 call getch@plt call next_token beq s0,zero,.L96 .L97: call eval call putint@plt addiw s0,s0,-1 li a0,10 call putch@plt bne s0,zero,.L97 .L96: ld ra,8(sp) ld s0,0(sp) li a0,0 addi sp,sp,16 jr ra .size main, .-main .globl cur_token .globl other .globl num .globl last_char .globl TOKEN_OTHER .globl TOKEN_NUM .globl _sysy_idx .globl _sysy_us .globl _sysy_s .globl _sysy_m .globl _sysy_h .globl _sysy_l2 .globl _sysy_l1 .globl _sysy_end .globl _sysy_start .data .align 2 .set .LANCHOR0,. + 0 .type last_char, @object .size last_char, 4 last_char: .word 32 .bss .align 3 .set .LANCHOR1,. + 0 .type other, @object .size other, 4 other: .zero 4 .type num, @object .size num, 4 num: .zero 4 .type cur_token, @object .size cur_token, 4 cur_token: .zero 4 .type _sysy_idx, @object .size _sysy_idx, 4 _sysy_idx: .zero 4 .type _sysy_us, @object .size _sysy_us, 4096 _sysy_us: .zero 4096 .type _sysy_s, @object .size _sysy_s, 4096 _sysy_s: .zero 4096 .type _sysy_m, @object .size _sysy_m, 4096 _sysy_m: .zero 4096 .type _sysy_h, @object .size _sysy_h, 4096 _sysy_h: .zero 4096 .type _sysy_l2, @object .size _sysy_l2, 4096 _sysy_l2: .zero 4096 .type _sysy_l1, @object .size _sysy_l1, 4096 _sysy_l1: .zero 4096 .type _sysy_end, @object .size _sysy_end, 16 _sysy_end: .zero 16 .type _sysy_start, @object .size _sysy_start, 16 _sysy_start: .zero 16 .section .rodata .align 2 .type TOKEN_OTHER, @object .size TOKEN_OTHER, 4 TOKEN_OTHER: .word 1 .type TOKEN_NUM, @object .size TOKEN_NUM, 4 TOKEN_NUM: .zero 4 .ident "GCC: (Debian 12.2.0-13) 12.2.0" .section .note.GNU-stack,"",@progbits