From cde1d9f2d6a3d404e638b2b62e73ea0875bbb48d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pedro=20Buzatti=20Mendes?= Date: Thu, 5 Dec 2024 22:58:53 -0300 Subject: [PATCH 01/12] refactoring csr for gate level simulation --- src/core/biriscv_csr.v | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/src/core/biriscv_csr.v b/src/core/biriscv_csr.v index 1222b18..c88ee2a 100644 --- a/src/core/biriscv_csr.v +++ b/src/core/biriscv_csr.v @@ -300,20 +300,31 @@ assign ifence_o = ifence_q; //----------------------------------------------------------------- reg branch_q; reg [31:0] branch_target_q; -reg reset_q; +reg [2:0] init_done; always @ (posedge clk_i or posedge rst_i) if (rst_i) begin - branch_target_q <= 32'b0; - branch_q <= 1'b0; - reset_q <= 1'b1; + init_done <= 2'h0; end -else if (reset_q) +else begin - branch_target_q <= reset_vector_i; - branch_q <= 1'b1; - reset_q <= 1'b0; + if(init_done == 2'h0) + begin + init_done <= 2'h1; + end + else if(init_done <= 2'h1) + begin + init_done <= 2'h2; + end +end + + +always @ (posedge clk_i or posedge rst_i) +if (rst_i) +begin + branch_target_q <= 32'b0; + branch_q <= 1'b0; end else begin @@ -321,8 +332,10 @@ begin branch_target_q <= csr_target_w; end -assign branch_csr_request_o = branch_q; -assign branch_csr_pc_o = branch_target_q; + +assign branch_csr_request_o = (init_done == 2'b1) ? 1'b1 : branch_q; +assign branch_csr_pc_o = (init_done == 2'b1) ? reset_vector_i : branch_target_q; + assign branch_csr_priv_o = satp_reg_w[`SATP_MODE_R] ? current_priv_w : `PRIV_MACHINE; //----------------------------------------------------------------- From e043ddfeb781b04cf3588816d6e47596619d4d60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pedro=20Buzatti=20Mendes?= Date: Thu, 5 Dec 2024 23:14:55 -0300 Subject: [PATCH 02/12] Renaming rst and clk --- src/core/riscv_core.v | 42 +++++++++++++++++++------------------- tb/tb_core_icarus/tb_top.v | 4 ++-- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/core/riscv_core.v b/src/core/riscv_core.v index efc2111..f6e80e5 100644 --- a/src/core/riscv_core.v +++ b/src/core/riscv_core.v @@ -28,7 +28,7 @@ module riscv_core // Params //----------------------------------------------------------------- #( - parameter SUPPORT_BRANCH_PREDICTION = 1 + parameter SUPPORT_BRANCH_PREDICTION = 0 ,parameter SUPPORT_MULDIV = 1 ,parameter SUPPORT_SUPER = 0 ,parameter SUPPORT_MMU = 0 @@ -54,8 +54,8 @@ module riscv_core //----------------------------------------------------------------- ( // Inputs - input clk_i - ,input rst_i + input clk + ,input rst_n ,input [ 31:0] mem_d_data_rd_i ,input mem_d_accept_i ,input mem_d_ack_i @@ -272,8 +272,8 @@ biriscv_frontend u_frontend ( // Inputs - .clk_i(clk_i) - ,.rst_i(rst_i) + .clk_i(clk) + ,.rst_i(rst_n) ,.icache_accept_i(mmu_ifetch_accept_w) ,.icache_valid_i(mmu_ifetch_valid_w) ,.icache_error_i(mmu_ifetch_error_w) @@ -338,8 +338,8 @@ biriscv_mmu u_mmu ( // Inputs - .clk_i(clk_i) - ,.rst_i(rst_i) + .clk_i(clk) + ,.rst_i(rst_n) ,.priv_d_i(mmu_priv_d_w) ,.sum_i(mmu_sum_w) ,.mxr_i(mmu_mxr_w) @@ -406,8 +406,8 @@ biriscv_lsu u_lsu ( // Inputs - .clk_i(clk_i) - ,.rst_i(rst_i) + .clk_i(clk) + ,.rst_i(rst_n) ,.opcode_valid_i(lsu_opcode_valid_w) ,.opcode_opcode_i(lsu_opcode_opcode_w) ,.opcode_pc_i(lsu_opcode_pc_w) @@ -450,8 +450,8 @@ biriscv_csr u_csr ( // Inputs - .clk_i(clk_i) - ,.rst_i(rst_i) + .clk_i(clk) + ,.rst_i(rst_n) ,.intr_i(intr_i) ,.opcode_valid_i(csr_opcode_valid_w) ,.opcode_opcode_i(csr_opcode_opcode_w) @@ -494,8 +494,8 @@ biriscv_multiplier u_mul ( // Inputs - .clk_i(clk_i) - ,.rst_i(rst_i) + .clk_i(clk) + ,.rst_i(rst_n) ,.opcode_valid_i(mul_opcode_valid_w) ,.opcode_opcode_i(mul_opcode_opcode_w) ,.opcode_pc_i(mul_opcode_pc_w) @@ -516,8 +516,8 @@ biriscv_divider u_div ( // Inputs - .clk_i(clk_i) - ,.rst_i(rst_i) + .clk_i(clk) + ,.rst_i(rst_n) ,.opcode_valid_i(div_opcode_valid_w) ,.opcode_opcode_i(opcode0_opcode_w) ,.opcode_pc_i(opcode0_pc_w) @@ -545,8 +545,8 @@ biriscv_issue u_issue ( // Inputs - .clk_i(clk_i) - ,.rst_i(rst_i) + .clk_i(clk) + ,.rst_i(rst_n) ,.fetch0_valid_i(fetch0_valid_w) ,.fetch0_instr_i(fetch0_instr_w) ,.fetch0_pc_i(fetch0_pc_w) @@ -690,8 +690,8 @@ biriscv_exec u_exec0 ( // Inputs - .clk_i(clk_i) - ,.rst_i(rst_i) + .clk_i(clk) + ,.rst_i(rst_n) ,.opcode_valid_i(exec0_opcode_valid_w) ,.opcode_opcode_i(opcode0_opcode_w) ,.opcode_pc_i(opcode0_pc_w) @@ -723,8 +723,8 @@ biriscv_exec u_exec1 ( // Inputs - .clk_i(clk_i) - ,.rst_i(rst_i) + .clk_i(clk) + ,.rst_i(rst_n) ,.opcode_valid_i(exec1_opcode_valid_w) ,.opcode_opcode_i(opcode1_opcode_w) ,.opcode_pc_i(opcode1_pc_w) diff --git a/tb/tb_core_icarus/tb_top.v b/tb/tb_core_icarus/tb_top.v index 1d3961c..d89ea33 100644 --- a/tb/tb_core_icarus/tb_top.v +++ b/tb/tb_core_icarus/tb_top.v @@ -71,8 +71,8 @@ u_dut //----------------------------------------------------------------- ( // Inputs - .clk_i(clk) - ,.rst_i(rst) + .clk(clk) + ,.rst_n(rst) ,.mem_d_data_rd_i(mem_d_data_rd_w) ,.mem_d_accept_i(mem_d_accept_w) ,.mem_d_ack_i(mem_d_ack_w) From 8ad379728304f01e3f4614cea2daf5a948547021 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pedro=20Buzatti=20Mendes?= Date: Sat, 7 Dec 2024 13:07:08 -0300 Subject: [PATCH 03/12] Adding trace for gate level simulation --- src/core/riscv_core.v | 1 - tb/tb_core_icarus/biriscv_trace_sim_gls.sv | 740 +++++++++++++++++++++ tb/tb_core_icarus/makefile | 5 +- tb/tb_core_icarus/tb_top.v | 20 + 4 files changed, 763 insertions(+), 3 deletions(-) create mode 100644 tb/tb_core_icarus/biriscv_trace_sim_gls.sv diff --git a/src/core/riscv_core.v b/src/core/riscv_core.v index f6e80e5..cce7e00 100644 --- a/src/core/riscv_core.v +++ b/src/core/riscv_core.v @@ -752,5 +752,4 @@ u_exec1 ); - endmodule diff --git a/tb/tb_core_icarus/biriscv_trace_sim_gls.sv b/tb/tb_core_icarus/biriscv_trace_sim_gls.sv new file mode 100644 index 0000000..68118a8 --- /dev/null +++ b/tb/tb_core_icarus/biriscv_trace_sim_gls.sv @@ -0,0 +1,740 @@ +//----------------------------------------------------------------- +// biRISC-V CPU +// V0.8.1 +// Ultra-Embedded.com +// Copyright 2019-2020 +// +// admin@ultra-embedded.com +// +// License: Apache 2.0 +//----------------------------------------------------------------- +// Copyright 2020 Ultra-Embedded.com +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//----------------------------------------------------------------- +`define ALU_NONE 4'b0000 +`define ALU_SHIFTL 4'b0001 +`define ALU_SHIFTR 4'b0010 +`define ALU_SHIFTR_ARITH 4'b0011 +`define ALU_ADD 4'b0100 +`define ALU_SUB 4'b0110 +`define ALU_AND 4'b0111 +`define ALU_OR 4'b1000 +`define ALU_XOR 4'b1001 +`define ALU_LESS_THAN 4'b1010 +`define ALU_LESS_THAN_SIGNED 4'b1011 + +//-------------------------------------------------------------------- +// Instructions Masks +//-------------------------------------------------------------------- +// andi +`define INST_ANDI 32'h7013 +`define INST_ANDI_MASK 32'h707f + +// addi +`define INST_ADDI 32'h13 +`define INST_ADDI_MASK 32'h707f + +// slti +`define INST_SLTI 32'h2013 +`define INST_SLTI_MASK 32'h707f + +// sltiu +`define INST_SLTIU 32'h3013 +`define INST_SLTIU_MASK 32'h707f + +// ori +`define INST_ORI 32'h6013 +`define INST_ORI_MASK 32'h707f + +// xori +`define INST_XORI 32'h4013 +`define INST_XORI_MASK 32'h707f + +// slli +`define INST_SLLI 32'h1013 +`define INST_SLLI_MASK 32'hfc00707f + +// srli +`define INST_SRLI 32'h5013 +`define INST_SRLI_MASK 32'hfc00707f + +// srai +`define INST_SRAI 32'h40005013 +`define INST_SRAI_MASK 32'hfc00707f + +// lui +`define INST_LUI 32'h37 +`define INST_LUI_MASK 32'h7f + +// auipc +`define INST_AUIPC 32'h17 +`define INST_AUIPC_MASK 32'h7f + +// add +`define INST_ADD 32'h33 +`define INST_ADD_MASK 32'hfe00707f + +// sub +`define INST_SUB 32'h40000033 +`define INST_SUB_MASK 32'hfe00707f + +// slt +`define INST_SLT 32'h2033 +`define INST_SLT_MASK 32'hfe00707f + +// sltu +`define INST_SLTU 32'h3033 +`define INST_SLTU_MASK 32'hfe00707f + +// xor +`define INST_XOR 32'h4033 +`define INST_XOR_MASK 32'hfe00707f + +// or +`define INST_OR 32'h6033 +`define INST_OR_MASK 32'hfe00707f + +// and +`define INST_AND 32'h7033 +`define INST_AND_MASK 32'hfe00707f + +// sll +`define INST_SLL 32'h1033 +`define INST_SLL_MASK 32'hfe00707f + +// srl +`define INST_SRL 32'h5033 +`define INST_SRL_MASK 32'hfe00707f + +// sra +`define INST_SRA 32'h40005033 +`define INST_SRA_MASK 32'hfe00707f + +// jal +`define INST_JAL 32'h6f +`define INST_JAL_MASK 32'h7f + +// jalr +`define INST_JALR 32'h67 +`define INST_JALR_MASK 32'h707f + +// beq +`define INST_BEQ 32'h63 +`define INST_BEQ_MASK 32'h707f + +// bne +`define INST_BNE 32'h1063 +`define INST_BNE_MASK 32'h707f + +// blt +`define INST_BLT 32'h4063 +`define INST_BLT_MASK 32'h707f + +// bge +`define INST_BGE 32'h5063 +`define INST_BGE_MASK 32'h707f + +// bltu +`define INST_BLTU 32'h6063 +`define INST_BLTU_MASK 32'h707f + +// bgeu +`define INST_BGEU 32'h7063 +`define INST_BGEU_MASK 32'h707f + +// lb +`define INST_LB 32'h3 +`define INST_LB_MASK 32'h707f + +// lh +`define INST_LH 32'h1003 +`define INST_LH_MASK 32'h707f + +// lw +`define INST_LW 32'h2003 +`define INST_LW_MASK 32'h707f + +// lbu +`define INST_LBU 32'h4003 +`define INST_LBU_MASK 32'h707f + +// lhu +`define INST_LHU 32'h5003 +`define INST_LHU_MASK 32'h707f + +// lwu +`define INST_LWU 32'h6003 +`define INST_LWU_MASK 32'h707f + +// sb +`define INST_SB 32'h23 +`define INST_SB_MASK 32'h707f + +// sh +`define INST_SH 32'h1023 +`define INST_SH_MASK 32'h707f + +// sw +`define INST_SW 32'h2023 +`define INST_SW_MASK 32'h707f + +// ecall +`define INST_ECALL 32'h73 +`define INST_ECALL_MASK 32'hffffffff + +// ebreak +`define INST_EBREAK 32'h100073 +`define INST_EBREAK_MASK 32'hffffffff + +// eret +`define INST_ERET 32'h200073 +`define INST_ERET_MASK 32'hcfffffff + +// csrrw +`define INST_CSRRW 32'h1073 +`define INST_CSRRW_MASK 32'h707f + +// csrrs +`define INST_CSRRS 32'h2073 +`define INST_CSRRS_MASK 32'h707f + +// csrrc +`define INST_CSRRC 32'h3073 +`define INST_CSRRC_MASK 32'h707f + +// csrrwi +`define INST_CSRRWI 32'h5073 +`define INST_CSRRWI_MASK 32'h707f + +// csrrsi +`define INST_CSRRSI 32'h6073 +`define INST_CSRRSI_MASK 32'h707f + +// csrrci +`define INST_CSRRCI 32'h7073 +`define INST_CSRRCI_MASK 32'h707f + +// mul +`define INST_MUL 32'h2000033 +`define INST_MUL_MASK 32'hfe00707f + +// mulh +`define INST_MULH 32'h2001033 +`define INST_MULH_MASK 32'hfe00707f + +// mulhsu +`define INST_MULHSU 32'h2002033 +`define INST_MULHSU_MASK 32'hfe00707f + +// mulhu +`define INST_MULHU 32'h2003033 +`define INST_MULHU_MASK 32'hfe00707f + +// div +`define INST_DIV 32'h2004033 +`define INST_DIV_MASK 32'hfe00707f + +// divu +`define INST_DIVU 32'h2005033 +`define INST_DIVU_MASK 32'hfe00707f + +// rem +`define INST_REM 32'h2006033 +`define INST_REM_MASK 32'hfe00707f + +// remu +`define INST_REMU 32'h2007033 +`define INST_REMU_MASK 32'hfe00707f + +// wfi +`define INST_WFI 32'h10500073 +`define INST_WFI_MASK 32'hffff8fff + +// fence +`define INST_FENCE 32'hf +`define INST_FENCE_MASK 32'h707f + +// sfence +`define INST_SFENCE 32'h12000073 +`define INST_SFENCE_MASK 32'hfe007fff + +// fence.i +`define INST_IFENCE 32'h100f +`define INST_IFENCE_MASK 32'h707f + +//-------------------------------------------------------------------- +// Privilege levels +//-------------------------------------------------------------------- +`define PRIV_USER 2'd0 +`define PRIV_SUPER 2'd1 +`define PRIV_MACHINE 2'd3 + +//-------------------------------------------------------------------- +// IRQ Numbers +//-------------------------------------------------------------------- +`define IRQ_S_SOFT 1 +`define IRQ_M_SOFT 3 +`define IRQ_S_TIMER 5 +`define IRQ_M_TIMER 7 +`define IRQ_S_EXT 9 +`define IRQ_M_EXT 11 +`define IRQ_MIN (`IRQ_S_SOFT) +`define IRQ_MAX (`IRQ_M_EXT + 1) +`define IRQ_MASK ((1 << `IRQ_M_EXT) | (1 << `IRQ_S_EXT) | (1 << `IRQ_M_TIMER) | (1 << `IRQ_S_TIMER) | (1 << `IRQ_M_SOFT) | (1 << `IRQ_S_SOFT)) + +`define SR_IP_MSIP_R `IRQ_M_SOFT +`define SR_IP_MTIP_R `IRQ_M_TIMER +`define SR_IP_MEIP_R `IRQ_M_EXT +`define SR_IP_SSIP_R `IRQ_S_SOFT +`define SR_IP_STIP_R `IRQ_S_TIMER +`define SR_IP_SEIP_R `IRQ_S_EXT + +//-------------------------------------------------------------------- +// CSR Registers - Simulation control +//-------------------------------------------------------------------- +`define CSR_DSCRATCH 12'h7b2 +`define CSR_SIM_CTRL 12'h8b2 +`define CSR_SIM_CTRL_MASK 32'hFFFFFFFF + `define CSR_SIM_CTRL_EXIT (0 << 24) + `define CSR_SIM_CTRL_PUTC (1 << 24) + +//-------------------------------------------------------------------- +// CSR Registers +//-------------------------------------------------------------------- +`define CSR_MSTATUS 12'h300 +`define CSR_MSTATUS_MASK 32'hFFFFFFFF +`define CSR_MISA 12'h301 +`define CSR_MISA_MASK 32'hFFFFFFFF +`define MISA_RV32 32'h40000000 +`define MISA_RVI 32'h00000100 +`define MISA_RVE 32'h00000010 +`define MISA_RVM 32'h00001000 +`define MISA_RVA 32'h00000001 +`define MISA_RVF 32'h00000020 +`define MISA_RVD 32'h00000008 +`define MISA_RVC 32'h00000004 +`define MISA_RVS 32'h00040000 +`define MISA_RVU 32'h00100000 +`define CSR_MEDELEG 12'h302 +`define CSR_MEDELEG_MASK 32'h0000FFFF +`define CSR_MIDELEG 12'h303 +`define CSR_MIDELEG_MASK 32'h0000FFFF +`define CSR_MIE 12'h304 +`define CSR_MIE_MASK `IRQ_MASK +`define CSR_MTVEC 12'h305 +`define CSR_MTVEC_MASK 32'hFFFFFFFF +`define CSR_MSCRATCH 12'h340 +`define CSR_MSCRATCH_MASK 32'hFFFFFFFF +`define CSR_MEPC 12'h341 +`define CSR_MEPC_MASK 32'hFFFFFFFF +`define CSR_MCAUSE 12'h342 +`define CSR_MCAUSE_MASK 32'h8000000F +`define CSR_MTVAL 12'h343 +`define CSR_MTVAL_MASK 32'hFFFFFFFF +`define CSR_MIP 12'h344 +`define CSR_MIP_MASK `IRQ_MASK +`define CSR_MCYCLE 12'hc00 +`define CSR_MCYCLE_MASK 32'hFFFFFFFF +`define CSR_MTIME 12'hc01 +`define CSR_MTIME_MASK 32'hFFFFFFFF +`define CSR_MTIMEH 12'hc81 +`define CSR_MTIMEH_MASK 32'hFFFFFFFF +`define CSR_MHARTID 12'hF14 +`define CSR_MHARTID_MASK 32'hFFFFFFFF + +// Non-std +`define CSR_MTIMECMP 12'h7c0 +`define CSR_MTIMECMP_MASK 32'hFFFFFFFF + +//----------------------------------------------------------------- +// CSR Registers - Supervisor +//----------------------------------------------------------------- +`define CSR_SSTATUS 12'h100 +`define CSR_SSTATUS_MASK `SR_SMODE_MASK +`define CSR_SIE 12'h104 +`define CSR_SIE_MASK ((1 << `IRQ_S_EXT) | (1 << `IRQ_S_TIMER) | (1 << `IRQ_S_SOFT)) +`define CSR_STVEC 12'h105 +`define CSR_STVEC_MASK 32'hFFFFFFFF +`define CSR_SSCRATCH 12'h140 +`define CSR_SSCRATCH_MASK 32'hFFFFFFFF +`define CSR_SEPC 12'h141 +`define CSR_SEPC_MASK 32'hFFFFFFFF +`define CSR_SCAUSE 12'h142 +`define CSR_SCAUSE_MASK 32'h8000000F +`define CSR_STVAL 12'h143 +`define CSR_STVAL_MASK 32'hFFFFFFFF +`define CSR_SIP 12'h144 +`define CSR_SIP_MASK ((1 << `IRQ_S_EXT) | (1 << `IRQ_S_TIMER) | (1 << `IRQ_S_SOFT)) +`define CSR_SATP 12'h180 +`define CSR_SATP_MASK 32'hFFFFFFFF + +//-------------------------------------------------------------------- +// CSR Registers - DCACHE control +//-------------------------------------------------------------------- +`define CSR_DFLUSH 12'h3a0 // pmpcfg0 +`define CSR_DFLUSH_MASK 32'hFFFFFFFF +`define CSR_DWRITEBACK 12'h3a1 // pmpcfg1 +`define CSR_DWRITEBACK_MASK 32'hFFFFFFFF +`define CSR_DINVALIDATE 12'h3a2 // pmpcfg2 +`define CSR_DINVALIDATE_MASK 32'hFFFFFFFF + +//-------------------------------------------------------------------- +// Status Register +//-------------------------------------------------------------------- +`define SR_UIE (1 << 0) +`define SR_UIE_R 0 +`define SR_SIE (1 << 1) +`define SR_SIE_R 1 +`define SR_MIE (1 << 3) +`define SR_MIE_R 3 +`define SR_UPIE (1 << 4) +`define SR_UPIE_R 4 +`define SR_SPIE (1 << 5) +`define SR_SPIE_R 5 +`define SR_MPIE (1 << 7) +`define SR_MPIE_R 7 +`define SR_SPP (1 << 8) +`define SR_SPP_R 8 + +`define SR_MPP_SHIFT 11 +`define SR_MPP_MASK 2'h3 +`define SR_MPP_R 12:11 +`define SR_MPP_U `PRIV_USER +`define SR_MPP_S `PRIV_SUPER +`define SR_MPP_M `PRIV_MACHINE + +`define SR_SUM_R 18 +`define SR_SUM (1 << `SR_SUM_R) + +`define SR_MPRV_R 17 +`define SR_MPRV (1 << `SR_MPRV_R) + +`define SR_MXR_R 19 +`define SR_MXR (1 << `SR_MXR_R) + +`define SR_SMODE_MASK (`SR_UIE | `SR_SIE | `SR_UPIE | `SR_SPIE | `SR_SPP | `SR_SUM) + +//-------------------------------------------------------------------- +// SATP definitions +//-------------------------------------------------------------------- +`define SATP_PPN_R 19:0 // TODO: Should be 21?? +`define SATP_ASID_R 30:22 +`define SATP_MODE_R 31 + +//-------------------------------------------------------------------- +// MMU Defs (SV32) +//-------------------------------------------------------------------- +`define MMU_LEVELS 2 +`define MMU_PTIDXBITS 10 +`define MMU_PTESIZE 4 +`define MMU_PGSHIFT (`MMU_PTIDXBITS + 2) +`define MMU_PGSIZE (1 << `MMU_PGSHIFT) +`define MMU_VPN_BITS (`MMU_PTIDXBITS * `MMU_LEVELS) +`define MMU_PPN_BITS (32 - `MMU_PGSHIFT) +`define MMU_VA_BITS (`MMU_VPN_BITS + `MMU_PGSHIFT) + +`define PAGE_PRESENT 0 +`define PAGE_READ 1 +`define PAGE_WRITE 2 +`define PAGE_EXEC 3 +`define PAGE_USER 4 +`define PAGE_GLOBAL 5 +`define PAGE_ACCESSED 6 +`define PAGE_DIRTY 7 +`define PAGE_SOFT 9:8 + +`define PAGE_FLAGS 10'h3FF + +`define PAGE_PFN_SHIFT 10 +`define PAGE_SIZE 4096 + +//-------------------------------------------------------------------- +// Exception Causes +//-------------------------------------------------------------------- +`define EXCEPTION_W 6 +`define EXCEPTION_MISALIGNED_FETCH 6'h10 +`define EXCEPTION_FAULT_FETCH 6'h11 +`define EXCEPTION_ILLEGAL_INSTRUCTION 6'h12 +`define EXCEPTION_BREAKPOINT 6'h13 +`define EXCEPTION_MISALIGNED_LOAD 6'h14 +`define EXCEPTION_FAULT_LOAD 6'h15 +`define EXCEPTION_MISALIGNED_STORE 6'h16 +`define EXCEPTION_FAULT_STORE 6'h17 +`define EXCEPTION_ECALL 6'h18 +`define EXCEPTION_ECALL_U 6'h18 +`define EXCEPTION_ECALL_S 6'h19 +`define EXCEPTION_ECALL_H 6'h1a +`define EXCEPTION_ECALL_M 6'h1b +`define EXCEPTION_PAGE_FAULT_INST 6'h1c +`define EXCEPTION_PAGE_FAULT_LOAD 6'h1d +`define EXCEPTION_PAGE_FAULT_STORE 6'h1f +`define EXCEPTION_EXCEPTION 6'h10 +`define EXCEPTION_INTERRUPT 6'h20 +`define EXCEPTION_ERET_U 6'h30 +`define EXCEPTION_ERET_S 6'h31 +`define EXCEPTION_ERET_H 6'h32 +`define EXCEPTION_ERET_M 6'h33 +`define EXCEPTION_FENCE 6'h34 +`define EXCEPTION_TYPE_MASK 6'h30 +`define EXCEPTION_SUBTYPE_R 3:0 + +`define MCAUSE_INT 31 +`define MCAUSE_MISALIGNED_FETCH ((0 << `MCAUSE_INT) | 0) +`define MCAUSE_FAULT_FETCH ((0 << `MCAUSE_INT) | 1) +`define MCAUSE_ILLEGAL_INSTRUCTION ((0 << `MCAUSE_INT) | 2) +`define MCAUSE_BREAKPOINT ((0 << `MCAUSE_INT) | 3) +`define MCAUSE_MISALIGNED_LOAD ((0 << `MCAUSE_INT) | 4) +`define MCAUSE_FAULT_LOAD ((0 << `MCAUSE_INT) | 5) +`define MCAUSE_MISALIGNED_STORE ((0 << `MCAUSE_INT) | 6) +`define MCAUSE_FAULT_STORE ((0 << `MCAUSE_INT) | 7) +`define MCAUSE_ECALL_U ((0 << `MCAUSE_INT) | 8) +`define MCAUSE_ECALL_S ((0 << `MCAUSE_INT) | 9) +`define MCAUSE_ECALL_H ((0 << `MCAUSE_INT) | 10) +`define MCAUSE_ECALL_M ((0 << `MCAUSE_INT) | 11) +`define MCAUSE_PAGE_FAULT_INST ((0 << `MCAUSE_INT) | 12) +`define MCAUSE_PAGE_FAULT_LOAD ((0 << `MCAUSE_INT) | 13) +`define MCAUSE_PAGE_FAULT_STORE ((0 << `MCAUSE_INT) | 15) +`define MCAUSE_INTERRUPT (1 << `MCAUSE_INT) + +//-------------------------------------------------------------------- +// Debug +//-------------------------------------------------------------------- +`define RISCV_REGNO_FIRST 13'd0 +`define RISCV_REGNO_GPR0 13'd0 +`define RISCV_REGNO_GPR31 13'd31 +`define RISCV_REGNO_PC 13'd32 +`define RISCV_REGNO_CSR0 13'd65 +`define RISCV_REGNO_CSR4095 (`RISCV_REGNO_CSR0 + 13'd4095) +`define RISCV_REGNO_PRIV 13'd4161 + +module biriscv_trace_sim_gls +( + input valid_i + ,input [31:0] opcode_i +); + +//----------------------------------------------------------------- +// get_regname_str: Convert register number to string +//----------------------------------------------------------------- + +function [79:0] get_regname_str; + input [4:0] regnum; +begin + case (regnum) + 5'd0: get_regname_str = "zero"; + 5'd1: get_regname_str = "ra"; + 5'd2: get_regname_str = "sp"; + 5'd3: get_regname_str = "gp"; + 5'd4: get_regname_str = "tp"; + 5'd5: get_regname_str = "t0"; + 5'd6: get_regname_str = "t1"; + 5'd7: get_regname_str = "t2"; + 5'd8: get_regname_str = "s0"; + 5'd9: get_regname_str = "s1"; + 5'd10: get_regname_str = "a0"; + 5'd11: get_regname_str = "a1"; + 5'd12: get_regname_str = "a2"; + 5'd13: get_regname_str = "a3"; + 5'd14: get_regname_str = "a4"; + 5'd15: get_regname_str = "a5"; + 5'd16: get_regname_str = "a6"; + 5'd17: get_regname_str = "a7"; + 5'd18: get_regname_str = "s2"; + 5'd19: get_regname_str = "s3"; + 5'd20: get_regname_str = "s4"; + 5'd21: get_regname_str = "s5"; + 5'd22: get_regname_str = "s6"; + 5'd23: get_regname_str = "s7"; + 5'd24: get_regname_str = "s8"; + 5'd25: get_regname_str = "s9"; + 5'd26: get_regname_str = "s10"; + 5'd27: get_regname_str = "s11"; + 5'd28: get_regname_str = "t3"; + 5'd29: get_regname_str = "t4"; + 5'd30: get_regname_str = "t5"; + 5'd31: get_regname_str = "t6"; + endcase +end +endfunction + +//------------------------------------------------------------------- +// Debug strings +//------------------------------------------------------------------- +reg [79:0] dbg_inst_str; +reg [79:0] dbg_inst_ra; +reg [79:0] dbg_inst_rb; +reg [79:0] dbg_inst_rd; + +wire [4:0] ra_idx_w = opcode_i[19:15]; +wire [4:0] rb_idx_w = opcode_i[24:20]; +wire [4:0] rd_idx_w = opcode_i[11:7]; + +`define DBG_IMM_IMM20 {opcode_i[31:12], 12'b0} +`define DBG_IMM_IMM12 {{20{opcode_i[31]}}, opcode_i[31:20]} +`define DBG_IMM_BIMM {{19{opcode_i[31]}}, opcode_i[31], opcode_i[7], opcode_i[30:25], opcode_i[11:8], 1'b0} +`define DBG_IMM_JIMM20 {{12{opcode_i[31]}}, opcode_i[19:12], opcode_i[20], opcode_i[30:25], opcode_i[24:21], 1'b0} +`define DBG_IMM_STOREIMM {{20{opcode_i[31]}}, opcode_i[31:25], opcode_i[11:7]} +`define DBG_IMM_SHAMT opcode_i[24:20] + +always @ * +begin + dbg_inst_str = "-"; + dbg_inst_ra = "-"; + dbg_inst_rb = "-"; + dbg_inst_rd = "-"; + + if (valid_i) + begin + dbg_inst_ra = get_regname_str(ra_idx_w); + dbg_inst_rb = get_regname_str(rb_idx_w); + dbg_inst_rd = get_regname_str(rd_idx_w); + + case (1'b1) + ((opcode_i & `INST_ANDI_MASK) == `INST_ANDI) : dbg_inst_str = "andi"; + ((opcode_i & `INST_ADDI_MASK) == `INST_ADDI) : dbg_inst_str = "addi"; + ((opcode_i & `INST_SLTI_MASK) == `INST_SLTI) : dbg_inst_str = "slti"; + ((opcode_i & `INST_SLTIU_MASK) == `INST_SLTIU) : dbg_inst_str = "sltiu"; + ((opcode_i & `INST_ORI_MASK) == `INST_ORI) : dbg_inst_str = "ori"; + ((opcode_i & `INST_XORI_MASK) == `INST_XORI) : dbg_inst_str = "xori"; + ((opcode_i & `INST_SLLI_MASK) == `INST_SLLI) : dbg_inst_str = "slli"; + ((opcode_i & `INST_SRLI_MASK) == `INST_SRLI) : dbg_inst_str = "srli"; + ((opcode_i & `INST_SRAI_MASK) == `INST_SRAI) : dbg_inst_str = "srai"; + ((opcode_i & `INST_LUI_MASK) == `INST_LUI) : dbg_inst_str = "lui"; + ((opcode_i & `INST_AUIPC_MASK) == `INST_AUIPC) : dbg_inst_str = "auipc"; + ((opcode_i & `INST_ADD_MASK) == `INST_ADD) : dbg_inst_str = "add"; + ((opcode_i & `INST_SUB_MASK) == `INST_SUB) : dbg_inst_str = "sub"; + ((opcode_i & `INST_SLT_MASK) == `INST_SLT) : dbg_inst_str = "slt"; + ((opcode_i & `INST_SLTU_MASK) == `INST_SLTU) : dbg_inst_str = "sltu"; + ((opcode_i & `INST_XOR_MASK) == `INST_XOR) : dbg_inst_str = "xor"; + ((opcode_i & `INST_OR_MASK) == `INST_OR) : dbg_inst_str = "or"; + ((opcode_i & `INST_AND_MASK) == `INST_AND) : dbg_inst_str = "and"; + ((opcode_i & `INST_SLL_MASK) == `INST_SLL) : dbg_inst_str = "sll"; + ((opcode_i & `INST_SRL_MASK) == `INST_SRL) : dbg_inst_str = "srl"; + ((opcode_i & `INST_SRA_MASK) == `INST_SRA) : dbg_inst_str = "sra"; + ((opcode_i & `INST_JAL_MASK) == `INST_JAL) : dbg_inst_str = "jal"; + ((opcode_i & `INST_JALR_MASK) == `INST_JALR) : dbg_inst_str = "jalr"; + ((opcode_i & `INST_BEQ_MASK) == `INST_BEQ) : dbg_inst_str = "beq"; + ((opcode_i & `INST_BNE_MASK) == `INST_BNE) : dbg_inst_str = "bne"; + ((opcode_i & `INST_BLT_MASK) == `INST_BLT) : dbg_inst_str = "blt"; + ((opcode_i & `INST_BGE_MASK) == `INST_BGE) : dbg_inst_str = "bge"; + ((opcode_i & `INST_BLTU_MASK) == `INST_BLTU) : dbg_inst_str = "bltu"; + ((opcode_i & `INST_BGEU_MASK) == `INST_BGEU) : dbg_inst_str = "bgeu"; + ((opcode_i & `INST_LB_MASK) == `INST_LB) : dbg_inst_str = "lb"; + ((opcode_i & `INST_LH_MASK) == `INST_LH) : dbg_inst_str = "lh"; + ((opcode_i & `INST_LW_MASK) == `INST_LW) : dbg_inst_str = "lw"; + ((opcode_i & `INST_LBU_MASK) == `INST_LBU) : dbg_inst_str = "lbu"; + ((opcode_i & `INST_LHU_MASK) == `INST_LHU) : dbg_inst_str = "lhu"; + ((opcode_i & `INST_LWU_MASK) == `INST_LWU) : dbg_inst_str = "lwu"; + ((opcode_i & `INST_SB_MASK) == `INST_SB) : dbg_inst_str = "sb"; + ((opcode_i & `INST_SH_MASK) == `INST_SH) : dbg_inst_str = "sh"; + ((opcode_i & `INST_SW_MASK) == `INST_SW) : dbg_inst_str = "sw"; + ((opcode_i & `INST_ECALL_MASK) == `INST_ECALL) : dbg_inst_str = "ecall"; + ((opcode_i & `INST_EBREAK_MASK) == `INST_EBREAK) : dbg_inst_str = "ebreak"; + ((opcode_i & `INST_ERET_MASK) == `INST_ERET) : dbg_inst_str = "eret"; + ((opcode_i & `INST_CSRRW_MASK) == `INST_CSRRW) : dbg_inst_str = "csrrw"; + ((opcode_i & `INST_CSRRS_MASK) == `INST_CSRRS) : dbg_inst_str = "csrrs"; + ((opcode_i & `INST_CSRRC_MASK) == `INST_CSRRC) : dbg_inst_str = "csrrc"; + ((opcode_i & `INST_CSRRWI_MASK) == `INST_CSRRWI) : dbg_inst_str = "csrrwi"; + ((opcode_i & `INST_CSRRSI_MASK) == `INST_CSRRSI) : dbg_inst_str = "csrrsi"; + ((opcode_i & `INST_CSRRCI_MASK) == `INST_CSRRCI) : dbg_inst_str = "csrrci"; + ((opcode_i & `INST_MUL_MASK) == `INST_MUL) : dbg_inst_str = "mul"; + ((opcode_i & `INST_MULH_MASK) == `INST_MULH) : dbg_inst_str = "mulh"; + ((opcode_i & `INST_MULHSU_MASK) == `INST_MULHSU) : dbg_inst_str = "mulhsu"; + ((opcode_i & `INST_MULHU_MASK) == `INST_MULHU) : dbg_inst_str = "mulhu"; + ((opcode_i & `INST_DIV_MASK) == `INST_DIV) : dbg_inst_str = "div"; + ((opcode_i & `INST_DIVU_MASK) == `INST_DIVU) : dbg_inst_str = "divu"; + ((opcode_i & `INST_REM_MASK) == `INST_REM) : dbg_inst_str = "rem"; + ((opcode_i & `INST_REMU_MASK) == `INST_REMU) : dbg_inst_str = "remu"; + ((opcode_i & `INST_IFENCE_MASK) == `INST_IFENCE) : dbg_inst_str = "fence.i"; + endcase + + case (1'b1) + + ((opcode_i & `INST_ADDI_MASK) == `INST_ADDI) , // addi + ((opcode_i & `INST_ANDI_MASK) == `INST_ANDI) , // andi + ((opcode_i & `INST_SLTI_MASK) == `INST_SLTI) , // slti + ((opcode_i & `INST_SLTIU_MASK) == `INST_SLTIU) , // sltiu + ((opcode_i & `INST_ORI_MASK) == `INST_ORI) , // ori + ((opcode_i & `INST_XORI_MASK) == `INST_XORI) , // xori + ((opcode_i & `INST_CSRRW_MASK) == `INST_CSRRW) , // csrrw + ((opcode_i & `INST_CSRRS_MASK) == `INST_CSRRS) , // csrrs + ((opcode_i & `INST_CSRRC_MASK) == `INST_CSRRC) , // csrrc + ((opcode_i & `INST_CSRRWI_MASK) == `INST_CSRRWI) ,// csrrwi + ((opcode_i & `INST_CSRRSI_MASK) == `INST_CSRRSI) ,// csrrsi + ((opcode_i & `INST_CSRRCI_MASK) == `INST_CSRRCI) :// csrrci + begin + dbg_inst_rb = "-"; + end + + ((opcode_i & `INST_SLLI_MASK) == `INST_SLLI) , // slli + ((opcode_i & `INST_SRLI_MASK) == `INST_SRLI) , // srli + ((opcode_i & `INST_SRAI_MASK) == `INST_SRAI) : // srai + begin + dbg_inst_rb = "-"; + end + + ((opcode_i & `INST_LUI_MASK) == `INST_LUI) : // lui + begin + dbg_inst_ra = "-"; + dbg_inst_rb = "-"; + end + + ((opcode_i & `INST_AUIPC_MASK) == `INST_AUIPC) : // auipc + begin + dbg_inst_ra = "pc"; + dbg_inst_rb = "-"; + end + + ((opcode_i & `INST_JAL_MASK) == `INST_JAL) : // jal + begin + dbg_inst_ra = "-"; + dbg_inst_rb = "-"; + + if (rd_idx_w == 5'd1) + dbg_inst_str = "call"; + end + + ((opcode_i & `INST_JALR_MASK) == `INST_JALR) : // jalr + begin + dbg_inst_rb = "-"; + + if (ra_idx_w == 5'd1 && `DBG_IMM_IMM12 == 32'b0) + dbg_inst_str = "ret"; + else if (rd_idx_w == 5'd1) + dbg_inst_str = "call (R)"; + end + + // lb lh lw lbu lhu lwu + ((opcode_i & `INST_LB_MASK) == `INST_LB) , + ((opcode_i & `INST_LH_MASK) == `INST_LH) , + ((opcode_i & `INST_LW_MASK) == `INST_LW) , + ((opcode_i & `INST_LBU_MASK) == `INST_LBU) , + ((opcode_i & `INST_LHU_MASK) == `INST_LHU) , + ((opcode_i & `INST_LWU_MASK) == `INST_LWU) : + begin + dbg_inst_rb = "-"; + end + + // sb sh sw + ((opcode_i & `INST_SB_MASK) == `INST_SB) , + ((opcode_i & `INST_SH_MASK) == `INST_SH) , + ((opcode_i & `INST_SW_MASK) == `INST_SW) : + begin + dbg_inst_rd = "-"; + end + endcase + end +end + +endmodule diff --git a/tb/tb_core_icarus/makefile b/tb/tb_core_icarus/makefile index 9a15f86..543f03a 100644 --- a/tb/tb_core_icarus/makefile +++ b/tb/tb_core_icarus/makefile @@ -3,7 +3,7 @@ ############################################################################### ELF_FILE ?= test.elf -OBJCOPY ?= riscv32-unknown-elf-objcopy +OBJCOPY ?= riscv64-unknown-elf-objcopy ifeq ($(shell which $(OBJCOPY)),) ${error $(OBJCOPY) missing from PATH} endif @@ -26,6 +26,7 @@ EXE ?= output.out # Variables: Verilog ############################################################################### SRC_V ?= $(foreach src,$(SRC_V_DIR),$(wildcard $(src)/*.v)) +SRC_SV ?= $(foreach src,$(SRC_V_DIR),$(wildcard $(src)/*.sv)) VFLAGS += $(patsubst %,-I%,$(SRC_V_DIR)) VFLAGS += -DTRACE=$(TRACE) @@ -49,7 +50,7 @@ $(BUILD_DIR)/tcm.bin: $(ELF_FILE) | $(BUILD_DIR) $(BUILD_DIR)/$(EXE): $(SRC_V) | $(BUILD_DIR) @echo "# Compiling verilog" - iverilog $(VFLAGS) -o $@ $(SRC_V) + iverilog $(VFLAGS) -o $@ $(SRC_V) $(SRC_SV) run: $(BUILD_DIR)/$(EXE) $(BUILD_DIR)/tcm.bin vvp $(BUILD_DIR)/$(EXE) -vcd diff --git a/tb/tb_core_icarus/tb_top.v b/tb/tb_core_icarus/tb_top.v index d89ea33..ca2ed17 100644 --- a/tb/tb_core_icarus/tb_top.v +++ b/tb/tb_core_icarus/tb_top.v @@ -1,5 +1,7 @@ module tb_top; +//`define trace_gate_level_simulation + reg clk; reg rst; @@ -134,4 +136,22 @@ u_mem ,.mem_d_resp_tag_o(mem_d_resp_tag_w) ); +`ifdef trace_gate_level_simulation + +biriscv_trace_sim_gls +trace_inst_0 +( + .valid_i(1'b1) + ,.opcode_i(mem_i_inst_w[31:0]) +); + +biriscv_trace_sim_gls +trace_inst_1 +( + .valid_i(1'b1) + ,.opcode_i(mem_i_inst_w[63:32]) +); + +`endif + endmodule \ No newline at end of file From ec221d0f72fd92f01c901ddb19660c854418005c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pedro=20Buzatti=20Mendes?= Date: Sun, 8 Dec 2024 16:55:19 -0300 Subject: [PATCH 04/12] Adding application generator and updating README file --- README.md | 164 +- riscv-app-gen/Makefile | 41 + riscv-app-gen/bubblesort/bubblesort.c | 23 + riscv-app-gen/bubblesort/bubblesort.elf | Bin 0 -> 5072 bytes riscv-app-gen/bubblesort/bubblesort.s | 57 + riscv-app-gen/link.ld | 33 + riscv-app-gen/original_test_code/test.elf | Bin 0 -> 28252 bytes riscv-app-gen/original_test_code/test.s | 2159 +++++++++++++++++++++ riscv-app-gen/quicksort/quicksort.c | 60 + riscv-app-gen/quicksort/quicksort.elf | Bin 0 -> 5692 bytes riscv-app-gen/quicksort/quicksort.s | 206 ++ riscv-app-gen/swap_bits/swapbits.c | 36 + riscv-app-gen/swap_bits/swapbits.elf | Bin 0 -> 4696 bytes riscv-app-gen/swap_bits/swapbits.s | 9 + tb/.DS_Store | Bin 0 -> 6148 bytes tb/tb_core_icarus/.DS_Store | Bin 0 -> 6148 bytes tb/tb_core_icarus/gtksettings.sav | 22 +- tb/tb_core_icarus/tb_top.v | 6 +- 18 files changed, 2708 insertions(+), 108 deletions(-) create mode 100644 riscv-app-gen/Makefile create mode 100644 riscv-app-gen/bubblesort/bubblesort.c create mode 100755 riscv-app-gen/bubblesort/bubblesort.elf create mode 100644 riscv-app-gen/bubblesort/bubblesort.s create mode 100644 riscv-app-gen/link.ld create mode 100755 riscv-app-gen/original_test_code/test.elf create mode 100644 riscv-app-gen/original_test_code/test.s create mode 100644 riscv-app-gen/quicksort/quicksort.c create mode 100755 riscv-app-gen/quicksort/quicksort.elf create mode 100644 riscv-app-gen/quicksort/quicksort.s create mode 100644 riscv-app-gen/swap_bits/swapbits.c create mode 100755 riscv-app-gen/swap_bits/swapbits.elf create mode 100644 riscv-app-gen/swap_bits/swapbits.s create mode 100644 tb/.DS_Store create mode 100644 tb/tb_core_icarus/.DS_Store diff --git a/README.md b/README.md index 62bb11f..df45970 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,23 @@ -# biRISC-V - 32-bit dual issue RISC-V CPU +

Computer Organization and Architecture III

+ +This project is part of the Computer Organization and Architecture III (2024.2) course. The objective of the project was to implement a logical synthesis of [biRISC-V Core](http://github.com/ultraembedded/biriscv) using IBM 180 PDK and perform a Gate Level Simulation. + + +1. [biRISC-V](#biriscv) +2. [Logic Synthesis](#logic-synthesis) +3. [Generating Applications](#generating-applications) +4. [Gate Level Simulation](#fourth-examplehttpwwwfourthexamplecom) + +
+ +## biRISC-V + +biRISC-V is a 32-bit dual issue RISC-V CPU made by [Ultraembedded](http://github.com/ultraembedded). -Github: [http://github.com/ultraembedded/biriscv](http://github.com/ultraembedded/biriscv) ![biRISC-V](docs/biRISC-V.png) -## Features +### Features * 32-bit RISC-V ISA CPU core. * Superscalar (dual-issue) in-order 6 or 7 stage pipeline. * Support RISC-V’s integer (I), multiplication and division (M), and CSR instructions (Z) extensions (RV32IMZicsr). @@ -26,109 +39,64 @@ Github: [http://github.com/ultraembedded/biriscv](http://github.com/ultraembedde *A sequence showing execution of 2 instructions per cycle;* ![Dual-Issue](docs/dual_issue.png) -## Documentation -* [Configuration](docs/configuration.md) -* [Booting Linux](docs/linux.md) -* [Integration](docs/integration.md) -* [Custom Features](docs/custom.md) - -## Similar Cores -* [SiFive E76](https://www.sifive.com/cores/e76) - * RV32IMAFC - * Dual issue in-order 8 stage pipeline - * 4 ALU units (2 early, 2 late) - * :heavy_multiplication_x: *Commercial closed source core/$$* -* [WD SweRV RISC-V Core EH1](https://github.com/chipsalliance/Cores-SweRV) - * RV32IMC - * Dual issue in-order 9 stage pipeline - * 4 ALU units (2 early, 2 late) - * :heavy_multiplication_x: *System Verilog + auto signal hookup* - * :heavy_multiplication_x: *No data cache option* - * :heavy_multiplication_x: *Not able to boot Linux* - -## Project Aims -* Boot Linux all the way to a functional userspace environment. :heavy_check_mark: -* Achieve competitive performance for this class of in-order machine (i.e. aim for 80% of WD SweRV CoreMark score). :heavy_check_mark: -* Reasonable PPA / FPGA resource friendly. :heavy_check_mark: -* Fit easily onto cheap hobbyist FPGAs (e.g. Xilinx Artix 7) without using all LUT resources and synthesize > 50MHz. :heavy_check_mark: -* Support various cache and TCM options. :heavy_check_mark: -* Be constructed using readable, maintainable and documented IEEE 1364-2001 Verilog. :heavy_check_mark: -* Simulate in open-source tools such as Verilator and Icarus Verilog. :heavy_check_mark: -* *In later releases, add support for atomic extensions.* - -*Booting the stock Linux 5.0.0-rc8 kernel built for RV32IMA to userspace on a Digilent Arty Artix 7 with biRISC-V (with atomic instructions emulated in the bootloader);* -![Linux-Boot](docs/linux-boot.png) - -## Prior Work -Based on my previous work; -* Github: [http://github.com/ultraembedded/riscv](http://github.com/ultraembedded/riscv) - -## Getting Started - -#### Cloning - -To clone this project and its dependencies; +## Logic Synthesis + +The synsthesis was performed with Cadence RTL Compiler , the execution scripts and the PDK (IBM 180) were provided by professor Mateus Beck. + +The core modules that must be included in the synthesis filelist are: ``` -git clone --recursive https://github.com/ultraembedded/biriscv.git +project +│ +│ +└───src + │ biriscv_defs.v + │ biriscv_alu.v + │ biriscv_csr_regfile.v + │ biriscv_csr.v + │ biriscv_decoder.v + │ biriscv_decode.v + │ biriscv_divider.v + │ biriscv_exec.v + │ biriscv_fetch.v + │ biriscv_frontend.v + │ biriscv_issue.v + │ biriscv_lsu.v + │ biriscv_mmu.v + │ biriscv_multiplier.v + │ biriscv_npc.v + │ biriscv_pipe_ctrl.v + │ biriscv_regfile.v + │ biriscv_trace_sim.v + │ biriscv_xilinx_2r1w.v + │ riscv_core.v +``` + +The non-synthesizable testbench modules are: +``` +project +│ +│ +└───tb + └───tb_core_icarus + │ tcm_mem_ram.v + │ tcm_mem.v + │ biriscv_trace_sim_gls.sv + │ tb_top.v + ``` -#### Running Helloworld +## Generating Applications -To run a simple test image on the core RTL using Icarus Verilog; +On `riscv-app-gen` you can find some risc-v applications (C, bin, elf) in the subdirectories. Also, you can generate your own program file by executing the `make` command specifying the C code e.g `make SRC=main.c`. This will use `riscv64-unknown-elf-ld` to manually link the code. -``` -# Install Icarus Verilog (Debian / Ubuntu / Linux Mint) -sudo apt-get install iverilog +You can also use gcc (`riscv64-unknown-elf-gcc`) to compile and link, e.g `make gcc_elf SRC=main.c`. -# [or] Install Icarus Verilog (Redhat / Centos) -#sudo yum install iverilog -# Run a simple test image (test.elf) -cd tb/tb_core_icarus -make -``` -The expected output is; -``` -Starting bench -VCD info: dumpfile waveform.vcd opened for output. - -Test: -1. Initialised data -2. Multiply -3. Divide -4. Shift left -5. Shift right -6. Shift right arithmetic -7. Signed comparision -8. Word access -9. Byte access -10. Comparision -``` +You must have [riscv-gnu-toolchain](https://github.com/riscv-collab/riscv-gnu-toolchain) installed with Linux multilib and available in your `PATH` environment variable. + +The linker script `riscv-app-gen/link.ld` was obtained from [Google's RISCV-DV](https://github.com/google/riscv-dv). -#### Configuration - -| Param Name | Valid Range | Description | -| ------------------------- |:--------------------:| ----------------------------------------------| -| SUPPORT_SUPER | 1/0 | Enable supervisor / user privilege levels. | -| SUPPORT_MMU | 1/0 | Enable basic memory management unit. | -| SUPPORT_MULDIV | 1/0 | Enable HW multiply / divide (RV-M). | -| SUPPORT_DUAL_ISSUE | 1/0 | Support superscalar operation. | -| SUPPORT_LOAD_BYPASS | 1/0 | Support load result bypass paths. | -| SUPPORT_MUL_BYPASS | 1/0 | Support multiply result bypass paths. | -| SUPPORT_REGFILE_XILINX | 1/0 | Support Xilinx optimised register file. | -| SUPPORT_BRANCH_PREDICTION | 1/0 | Enable branch prediction structures. | -| NUM_BTB_ENTRIES | 2 - | Number of branch target buffer entries. | -| NUM_BTB_ENTRIES_W | 1 - | Set to log2(NUM_BTB_ENTRIES). | -| NUM_BHT_ENTRIES | 2 - | Number of branch history table entries. | -| NUM_BHT_ENTRIES_W | 1 - | Set to log2(NUM_BHT_ENTRIES_W). | -| BHT_ENABLE | 1/0 | Enable branch history table based prediction. | -| GSHARE_ENABLE | 1/0 | Enable GSHARE branch prediction algorithm. | -| RAS_ENABLE | 1/0 | Enable return address stack prediction. | -| NUM_RAS_ENTRIES | 2 - | Number of return stack addresses supported. | -| NUM_RAS_ENTRIES_W | 1 - | Set to log2(NUM_RAS_ENTRIES_W). | -| EXTRA_DECODE_STAGE | 1/0 | Extra decode pipe stage for improved timing. | -| MEM_CACHE_ADDR_MIN | 32'h0 - 32'hffffffff | Lowest cacheable memory address. | -| MEM_CACHE_ADDR_MAX | 32'h0 - 32'hffffffff | Highest cacheable memory address. | +The entry point specified in the linker command is the main function, therefore, you must check the entry point address code with the comand `make info` e.g `make info ELF=main.elf`. This entry point is required to execute the testbench and need to be passed to the `reset_vector_i` input in `src/riscv_core.v` . \ No newline at end of file diff --git a/riscv-app-gen/Makefile b/riscv-app-gen/Makefile new file mode 100644 index 0000000..ca49edb --- /dev/null +++ b/riscv-app-gen/Makefile @@ -0,0 +1,41 @@ + +SRC ?= main.c + +CC = riscv64-unknown-elf-gcc +LD = riscv64-unknown-elf-ld +OBJDUMP = riscv64-unknown-elf-objdump +READELF = riscv64-unknown-elf-readelf + +CFLAGS = -march=rv32im -mabi=ilp32 -O0 +LDFLAGS = -b elf32-littleriscv -T link.ld -entry=main +GCC_LDFLAGS = -T link.ld -nostartfiles -e main -O2 + +OBJ = $(SRC:.c=.o) +ELF = $(SRC:.c=.elf) +ASM = $(SRC:.c=.s) + + +# Regras +all: $(ELF) $(ASM) info + +$(OBJ): $(SRC) + $(CC) $(CFLAGS) -o $@ -c $< + +$(ELF): $(OBJ) + $(LD) $(OBJ) -o $@ $(LDFLAGS) + +$(ASM): $(ELF) + $(OBJDUMP) -d $< > $@ + +info: + $(READELF) -h $(ELF) + +gcc_elf: $(SRC) + $(CC) $(CFLAGS) $(GCC_LDFLAGS) -o $(ELF) $< + $(OBJDUMP) -d $(ELF) > $(ASM) + $(READELF) -h $(ELF) + +clean: + rm -f *.o *.elf *.s *.bin + +.PHONY: all clean info \ No newline at end of file diff --git a/riscv-app-gen/bubblesort/bubblesort.c b/riscv-app-gen/bubblesort/bubblesort.c new file mode 100644 index 0000000..e5faf26 --- /dev/null +++ b/riscv-app-gen/bubblesort/bubblesort.c @@ -0,0 +1,23 @@ +#include + +void bubbleSort(int arr[], int n) { + for (int i = 0; i < n - 1; i++) { + for (int j = 0; j < n - i - 1; j++) { + if (arr[j] > arr[j + 1]) { + // Troca os elementos + int temp = arr[j]; + arr[j] = arr[j + 1]; + arr[j + 1] = temp; + } + } + } +} + +int main() { + int arr[] = {5, 4, 3, 2, 1, 0,3}; + + bubbleSort(arr, 7); + + return 0; +} + diff --git a/riscv-app-gen/bubblesort/bubblesort.elf b/riscv-app-gen/bubblesort/bubblesort.elf new file mode 100755 index 0000000000000000000000000000000000000000..3d418469b318e24a7859fbdd7cf68fca3c6637dd GIT binary patch literal 5072 zcmeHL&ubGw6#h1wZCV6LyB-t;qg!iR%9^I3Qt@CZH5U*5=)qgq{ICsln`N^p)r$*3 z@&`mbcoKxRC$Hvc58AU()SF0APhyMoW*gtz-HD|ri064Q`{sM^o0+%Y%;`Oxy>VSp z6bOsq2N=x(ewO^gK$yuQ1r@{SLoaza-;!blFd9wc=kP1izqyka_sen{KDj*e*3jC)6dT$cNo9(#%U<~!gjPn+Z!G6UU zQWRr&1IFlE7-OGcn7jDC^Kq|{+KB1YK%jLhpU1rf?l({`0x=pv&mqFOnVBo8;rVoS za%!@4FFiGq8qb;;GmYsHVz`xBaT&^4n#PlwyF8JpWSsH5opI9n2ew^b9Cy-``?L8R zR-@CnM-pPL0BCnHSM}S}pwh!w>(R!1P*7{H1)5PMt: +80000000: 00100813 li a6,1 +80000004: 04b85063 bge a6,a1,80000044 +80000008: 00259613 slli a2,a1,0x2 +8000000c: 00c50633 add a2,a0,a2 +80000010: 00450513 addi a0,a0,4 +80000014: 00050793 mv a5,a0 +80000018: 02b85863 bge a6,a1,80000048 +8000001c: ffc7a703 lw a4,-4(a5) +80000020: 0007a683 lw a3,0(a5) +80000024: 00e6d663 bge a3,a4,80000030 +80000028: fed7ae23 sw a3,-4(a5) +8000002c: 00e7a023 sw a4,0(a5) +80000030: 00478793 addi a5,a5,4 +80000034: fec794e3 bne a5,a2,8000001c +80000038: fff58593 addi a1,a1,-1 +8000003c: ffc60613 addi a2,a2,-4 +80000040: fd059ae3 bne a1,a6,80000014 +80000044: 00008067 ret +80000048: fff58593 addi a1,a1,-1 +8000004c: ffc60613 addi a2,a2,-4 +80000050: fc5ff06f j 80000014 + +Disassembly of section .text.startup: + +80000054
: +80000054: 800007b7 lui a5,0x80000 +80000058: 0b878793 addi a5,a5,184 # 800000b8 +8000005c: 0007a303 lw t1,0(a5) +80000060: 0047a883 lw a7,4(a5) +80000064: 0087a803 lw a6,8(a5) +80000068: 00c7a603 lw a2,12(a5) +8000006c: 0107a683 lw a3,16(a5) +80000070: 0147a703 lw a4,20(a5) +80000074: 0187a783 lw a5,24(a5) +80000078: fd010113 addi sp,sp,-48 +8000007c: 00410513 addi a0,sp,4 +80000080: 00700593 li a1,7 +80000084: 02112623 sw ra,44(sp) +80000088: 00612223 sw t1,4(sp) +8000008c: 01112423 sw a7,8(sp) +80000090: 01012623 sw a6,12(sp) +80000094: 00c12823 sw a2,16(sp) +80000098: 00d12a23 sw a3,20(sp) +8000009c: 00e12c23 sw a4,24(sp) +800000a0: 00f12e23 sw a5,28(sp) +800000a4: f5dff0ef jal 80000000 +800000a8: 02c12083 lw ra,44(sp) +800000ac: 00000513 li a0,0 +800000b0: 03010113 addi sp,sp,48 +800000b4: 00008067 ret diff --git a/riscv-app-gen/link.ld b/riscv-app-gen/link.ld new file mode 100644 index 0000000..df08889 --- /dev/null +++ b/riscv-app-gen/link.ld @@ -0,0 +1,33 @@ +/* Copyright 2018 Google LLC +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http:*www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +OUTPUT_ARCH( "riscv" ) +ENTRY(_start) + +SECTIONS +{ + . = 0x80000000; + .text : { *(.text) } + . = ALIGN(0x1000); + .tohost : { *(.tohost) } + . = ALIGN(0x1000); + .page_table : { *(.page_table) } + .data : { *(.data) } + .user_stack : { *(.user_stack) } + .kernel_data : { *(.kernel_data) } + .kernel_stack : { *(.kernel_stack) } + .bss : { *(.bss) } + _end = .; +} diff --git a/riscv-app-gen/original_test_code/test.elf b/riscv-app-gen/original_test_code/test.elf new file mode 100755 index 0000000000000000000000000000000000000000..4b0b6955877bc59069267f6cdb2977eae773c084 GIT binary patch literal 28252 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

IXHnUr&cKqoj&LYY)G#fRF*avYYjbE$ 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 Xwu_%&2W|f~6e-EO{Dct`9^#T>j literal 0 HcmV?d00001 diff --git a/riscv-app-gen/original_test_code/test.s b/riscv-app-gen/original_test_code/test.s new file mode 100644 index 0000000..078300d --- /dev/null +++ b/riscv-app-gen/original_test_code/test.s @@ -0,0 +1,2159 @@ + +test.elf: file format elf32-littleriscv + + +Disassembly of section .text: + +80000000 : +80000000: 2600006f j 80000260 +80000004: 0000 unimp + ... + +80000008 : + ... +80000010: 1140006f j 80000124 + ... + +80000020 : +80000020: 0000 unimp + ... + +80000024 : + ... + +80000124 : +80000124: f7410113 addi sp,sp,-140 +80000128: 09f12423 sw t6,136(sp) +8000012c: 09e12223 sw t5,132(sp) +80000130: 09d12023 sw t4,128(sp) +80000134: 07c12e23 sw t3,124(sp) +80000138: 07b12c23 sw s11,120(sp) +8000013c: 07a12a23 sw s10,116(sp) +80000140: 07912823 sw s9,112(sp) +80000144: 07812623 sw s8,108(sp) +80000148: 07712423 sw s7,104(sp) +8000014c: 07612223 sw s6,100(sp) +80000150: 07512023 sw s5,96(sp) +80000154: 05412e23 sw s4,92(sp) +80000158: 05312c23 sw s3,88(sp) +8000015c: 05212a23 sw s2,84(sp) +80000160: 05112823 sw a7,80(sp) +80000164: 05012623 sw a6,76(sp) +80000168: 04f12423 sw a5,72(sp) +8000016c: 04e12223 sw a4,68(sp) +80000170: 04d12023 sw a3,64(sp) +80000174: 02c12e23 sw a2,60(sp) +80000178: 02b12c23 sw a1,56(sp) +8000017c: 02a12a23 sw a0,52(sp) +80000180: 02912823 sw s1,48(sp) +80000184: 02812623 sw s0,44(sp) +80000188: 02712423 sw t2,40(sp) +8000018c: 02612223 sw t1,36(sp) +80000190: 02512023 sw t0,32(sp) +80000194: 00412e23 sw tp,28(sp) +80000198: 00312c23 sw gp,24(sp) +8000019c: 00212a23 sw sp,20(sp) +800001a0: 00112823 sw ra,16(sp) +800001a4: 34202473 csrr s0,mcause +800001a8: 00812423 sw s0,8(sp) +800001ac: 30002473 csrr s0,mstatus +800001b0: 00812223 sw s0,4(sp) +800001b4: 34102473 csrr s0,mepc +800001b8: 00812023 sw s0,0(sp) +800001bc: 00010513 mv a0,sp +800001c0: 148000ef jal 80000308 + +800001c4 : +800001c4: 00050113 mv sp,a0 +800001c8: 00012403 lw s0,0(sp) +800001cc: 34141073 csrw mepc,s0 +800001d0: 00412403 lw s0,4(sp) +800001d4: 30041073 csrw mstatus,s0 +800001d8: 01012083 lw ra,16(sp) +800001dc: 01812183 lw gp,24(sp) +800001e0: 01c12203 lw tp,28(sp) +800001e4: 02012283 lw t0,32(sp) +800001e8: 02412303 lw t1,36(sp) +800001ec: 02812383 lw t2,40(sp) +800001f0: 02c12403 lw s0,44(sp) +800001f4: 03012483 lw s1,48(sp) +800001f8: 03412503 lw a0,52(sp) +800001fc: 03812583 lw a1,56(sp) +80000200: 03c12603 lw a2,60(sp) +80000204: 04012683 lw a3,64(sp) +80000208: 04412703 lw a4,68(sp) +8000020c: 04812783 lw a5,72(sp) +80000210: 04c12803 lw a6,76(sp) +80000214: 05012883 lw a7,80(sp) +80000218: 05412903 lw s2,84(sp) +8000021c: 05812983 lw s3,88(sp) +80000220: 05c12a03 lw s4,92(sp) +80000224: 06012a83 lw s5,96(sp) +80000228: 06412b03 lw s6,100(sp) +8000022c: 06812b83 lw s7,104(sp) +80000230: 06c12c03 lw s8,108(sp) +80000234: 07012c83 lw s9,112(sp) +80000238: 07412d03 lw s10,116(sp) +8000023c: 07812d83 lw s11,120(sp) +80000240: 07c12e03 lw t3,124(sp) +80000244: 08012e83 lw t4,128(sp) +80000248: 08412f03 lw t5,132(sp) +8000024c: 08812f83 lw t6,136(sp) +80000250: 08c10113 addi sp,sp,140 +80000254: 30200073 mret + +80000258 : +80000258: 00000073 ecall +8000025c: 00008067 ret + +80000260 : +80000260: 80003137 lui sp,0x80003 +80000264: e4010113 addi sp,sp,-448 # 80002e40 <_sp> +80000268: 800002b7 lui t0,0x80000 +8000026c: 12428293 addi t0,t0,292 # 80000124 +80000270: 30529073 csrw mtvec,t0 +80000274: 800022b7 lui t0,0x80002 +80000278: df828293 addi t0,t0,-520 # 80001df8 <_exception_table> +8000027c: 80003337 lui t1,0x80003 +80000280: e5030313 addi t1,t1,-432 # 80002e50 <_end> + +80000284 : +80000284: 028000ef jal 800002ac +80000288: 80000537 lui a0,0x80000 +8000028c: 02050513 addi a0,a0,32 # 80000020 +80000290: 00052503 lw a0,0(a0) +80000294: 800005b7 lui a1,0x80000 +80000298: 02458593 addi a1,a1,36 # 80000024 +8000029c: 388000ef jal 80000624

+ +800002a0 <_exit>: +800002a0: 7b201073 csrw dscratch0,zero + +800002a4 <_exit_loop>: +800002a4: 000000ef jal 800002a4 <_exit_loop> + +800002a8 : +800002a8: 00008067 ret + +800002ac : +800002ac: ff010113 addi sp,sp,-16 +800002b0: 00112623 sw ra,12(sp) +800002b4: 2d4000ef jal 80000588 +800002b8: 00c12083 lw ra,12(sp) +800002bc: 80000537 lui a0,0x80000 +800002c0: 56450513 addi a0,a0,1380 # 80000564 +800002c4: 01010113 addi sp,sp,16 +800002c8: 6c50006f j 8000118c + +800002cc : +800002cc: 800027b7 lui a5,0x80002 +800002d0: e2a7ac23 sw a0,-456(a5) # 80001e38 <_irq_handler> +800002d4: 00008067 ret + +800002d8 : +800002d8: 800027b7 lui a5,0x80002 +800002dc: df878793 addi a5,a5,-520 # 80001df8 <_exception_table> +800002e0: 02a7a023 sw a0,32(a5) +800002e4: 02a7a223 sw a0,36(a5) +800002e8: 02a7a623 sw a0,44(a5) +800002ec: 00008067 ret + +800002f0 : +800002f0: 00251793 slli a5,a0,0x2 +800002f4: 80002537 lui a0,0x80002 +800002f8: df850513 addi a0,a0,-520 # 80001df8 <_exception_table> +800002fc: 00f50533 add a0,a0,a5 +80000300: 00b52023 sw a1,0(a0) +80000304: 00008067 ret + +80000308 : +80000308: 00452783 lw a5,4(a0) +8000030c: ffffe737 lui a4,0xffffe +80000310: 7ff70713 addi a4,a4,2047 # ffffe7ff <_end+0x7fffb9af> +80000314: 00e7f7b3 and a5,a5,a4 +80000318: 00002737 lui a4,0x2 +8000031c: ff010113 addi sp,sp,-16 +80000320: 80070713 addi a4,a4,-2048 # 1800 +80000324: 00852603 lw a2,8(a0) +80000328: 00812423 sw s0,8(sp) +8000032c: 00112623 sw ra,12(sp) +80000330: 00e7e7b3 or a5,a5,a4 +80000334: 00f52223 sw a5,4(a0) +80000338: 00050413 mv s0,a0 +8000033c: 08064c63 bltz a2,800003d4 +80000340: ff860713 addi a4,a2,-8 +80000344: 00300793 li a5,3 +80000348: 04e7f863 bgeu a5,a4,80000398 +8000034c: 00f00793 li a5,15 +80000350: 04c7fc63 bgeu a5,a2,800003a8 +80000354: 00042583 lw a1,0(s0) +80000358: 80002537 lui a0,0x80002 +8000035c: 9dc50513 addi a0,a0,-1572 # 800019dc <__modsi3+0x58> +80000360: 23c010ef jal 8000159c +80000364: 80002637 lui a2,0x80002 +80000368: 800025b7 lui a1,0x80002 +8000036c: 80002537 lui a0,0x80002 +80000370: 04400693 li a3,68 +80000374: a0860613 addi a2,a2,-1528 # 80001a08 <__modsi3+0x84> +80000378: a4058593 addi a1,a1,-1472 # 80001a40 <__modsi3+0xbc> +8000037c: a5850513 addi a0,a0,-1448 # 80001a58 <__modsi3+0xd4> +80000380: 230000ef jal 800005b0 +80000384: 00040513 mv a0,s0 +80000388: 00c12083 lw ra,12(sp) +8000038c: 00812403 lw s0,8(sp) +80000390: 01010113 addi sp,sp,16 +80000394: 00008067 ret +80000398: 00100793 li a5,1 +8000039c: 00e797b3 sll a5,a5,a4 +800003a0: 00b7f793 andi a5,a5,11 +800003a4: 04079663 bnez a5,800003f0 +800003a8: 80002737 lui a4,0x80002 +800003ac: 00261793 slli a5,a2,0x2 +800003b0: df870713 addi a4,a4,-520 # 80001df8 <_exception_table> +800003b4: 00f707b3 add a5,a4,a5 +800003b8: 0007a303 lw t1,0(a5) +800003bc: f8030ce3 beqz t1,80000354 +800003c0: 00040513 mv a0,s0 +800003c4: 00812403 lw s0,8(sp) +800003c8: 00c12083 lw ra,12(sp) +800003cc: 01010113 addi sp,sp,16 +800003d0: 00030067 jr t1 +800003d4: 800027b7 lui a5,0x80002 +800003d8: e387a303 lw t1,-456(a5) # 80001e38 <_irq_handler> +800003dc: fe0314e3 bnez t1,800003c4 +800003e0: 80002537 lui a0,0x80002 +800003e4: 9cc50513 addi a0,a0,-1588 # 800019cc <__modsi3+0x48> +800003e8: 5b1000ef jal 80001198 +800003ec: f99ff06f j 80000384 +800003f0: 00052783 lw a5,0(a0) +800003f4: 00478793 addi a5,a5,4 +800003f8: 00f52023 sw a5,0(a0) +800003fc: fadff06f j 800003a8 + +80000400 : +80000400: fe010113 addi sp,sp,-32 +80000404: 00452683 lw a3,4(a0) +80000408: 00852603 lw a2,8(a0) +8000040c: 00052583 lw a1,0(a0) +80000410: 00912a23 sw s1,20(sp) +80000414: 00050493 mv s1,a0 +80000418: 80002537 lui a0,0x80002 +8000041c: a6050513 addi a0,a0,-1440 # 80001a60 <__modsi3+0xdc> +80000420: 00812c23 sw s0,24(sp) +80000424: 01212823 sw s2,16(sp) +80000428: 01312623 sw s3,12(sp) +8000042c: 00112e23 sw ra,28(sp) +80000430: 00c48493 addi s1,s1,12 +80000434: 168010ef jal 8000159c +80000438: 00000413 li s0,0 +8000043c: 800029b7 lui s3,0x80002 +80000440: 02000913 li s2,32 +80000444: 0004a603 lw a2,0(s1) +80000448: 00040593 mv a1,s0 +8000044c: a8c98513 addi a0,s3,-1396 # 80001a8c <__modsi3+0x108> +80000450: 00140413 addi s0,s0,1 +80000454: 148010ef jal 8000159c +80000458: 00448493 addi s1,s1,4 +8000045c: ff2414e3 bne s0,s2,80000444 +80000460: 01c12083 lw ra,28(sp) +80000464: 01812403 lw s0,24(sp) +80000468: 01412483 lw s1,20(sp) +8000046c: 01012903 lw s2,16(sp) +80000470: 00c12983 lw s3,12(sp) +80000474: 02010113 addi sp,sp,32 +80000478: 00008067 ret + +8000047c : +8000047c: fe010113 addi sp,sp,-32 +80000480: 00812c23 sw s0,24(sp) +80000484: 00912a23 sw s1,20(sp) +80000488: 01212823 sw s2,16(sp) +8000048c: 01312623 sw s3,12(sp) +80000490: 00112e23 sw ra,28(sp) +80000494: 00050413 mv s0,a0 +80000498: 00058493 mv s1,a1 +8000049c: 00060993 mv s3,a2 +800004a0: 00068913 mv s2,a3 +800004a4: 08050e63 beqz a0,80000540 +800004a8: 06048a63 beqz s1,8000051c +800004ac: 00249613 slli a2,s1,0x2 +800004b0: ffc60613 addi a2,a2,-4 +800004b4: 00c40633 add a2,s0,a2 +800004b8: f7460513 addi a0,a2,-140 +800004bc: f8060713 addi a4,a2,-128 +800004c0: 00000793 li a5,0 +800004c4: 02000693 li a3,32 +800004c8: 00f72023 sw a5,0(a4) +800004cc: 00178793 addi a5,a5,1 +800004d0: 00470713 addi a4,a4,4 +800004d4: fed79ae3 bne a5,a3,800004c8 +800004d8: 800007b7 lui a5,0x80000 +800004dc: 2a078793 addi a5,a5,672 # 800002a0 <_exit> +800004e0: f8f62223 sw a5,-124(a2) +800004e4: 01c12083 lw ra,28(sp) +800004e8: 01812403 lw s0,24(sp) +800004ec: 000027b7 lui a5,0x2 +800004f0: 88078793 addi a5,a5,-1920 # 1880 +800004f4: f7362a23 sw s3,-140(a2) +800004f8: fb262423 sw s2,-88(a2) +800004fc: f8a62423 sw a0,-120(a2) +80000500: f6062e23 sw zero,-132(a2) +80000504: f6f62c23 sw a5,-136(a2) +80000508: 01412483 lw s1,20(sp) +8000050c: 01012903 lw s2,16(sp) +80000510: 00c12983 lw s3,12(sp) +80000514: 02010113 addi sp,sp,32 +80000518: 00008067 ret +8000051c: 80002637 lui a2,0x80002 +80000520: 800025b7 lui a1,0x80002 +80000524: 80002537 lui a0,0x80002 +80000528: 05f00693 li a3,95 +8000052c: a0860613 addi a2,a2,-1528 # 80001a08 <__modsi3+0x84> +80000530: aa458593 addi a1,a1,-1372 # 80001aa4 <__modsi3+0x120> +80000534: a5850513 addi a0,a0,-1448 # 80001a58 <__modsi3+0xd4> +80000538: 078000ef jal 800005b0 +8000053c: f71ff06f j 800004ac +80000540: 80002637 lui a2,0x80002 +80000544: 800025b7 lui a1,0x80002 +80000548: 80002537 lui a0,0x80002 +8000054c: 05e00693 li a3,94 +80000550: a0860613 addi a2,a2,-1528 # 80001a08 <__modsi3+0x84> +80000554: a9c58593 addi a1,a1,-1380 # 80001a9c <__modsi3+0x118> +80000558: a5850513 addi a0,a0,-1448 # 80001a58 <__modsi3+0xd4> +8000055c: 054000ef jal 800005b0 +80000560: f49ff06f j 800004a8 + +80000564 : +80000564: 010007b7 lui a5,0x1000 +80000568: 00f56533 or a0,a0,a5 +8000056c: 7b251073 csrw dscratch0,a0 +80000570: 00000513 li a0,0 +80000574: 00008067 ret + +80000578 : +80000578: 00000513 li a0,0 +8000057c: 00008067 ret + +80000580 : +80000580: fff00513 li a0,-1 +80000584: 00008067 ret + +80000588 : +80000588: 00008067 ret + +8000058c : +8000058c: 00054783 lbu a5,0(a0) +80000590: 00078e63 beqz a5,800005ac +80000594: 01000737 lui a4,0x1000 +80000598: 00150513 addi a0,a0,1 +8000059c: 00e7e7b3 or a5,a5,a4 +800005a0: 7b279073 csrw dscratch0,a5 +800005a4: 00054783 lbu a5,0(a0) +800005a8: fe0798e3 bnez a5,80000598 +800005ac: 00008067 ret + +800005b0 : +800005b0: 00068713 mv a4,a3 +800005b4: 00060693 mv a3,a2 +800005b8: 00058613 mv a2,a1 +800005bc: 00050593 mv a1,a0 +800005c0: 80002537 lui a0,0x80002 +800005c4: ff010113 addi sp,sp,-16 +800005c8: ab450513 addi a0,a0,-1356 # 80001ab4 <__modsi3+0x130> +800005cc: 00112623 sw ra,12(sp) +800005d0: 7cd000ef jal 8000159c +800005d4: 0ff00793 li a5,255 +800005d8: 7b279073 csrw dscratch0,a5 +800005dc: 00c12083 lw ra,12(sp) +800005e0: 01010113 addi sp,sp,16 +800005e4: 00008067 ret + +800005e8 : +800005e8: 00008067 ret + +800005ec : +800005ec: c00026f3 rdcycle a3 +800005f0: 0000c737 lui a4,0xc +800005f4: 35070713 addi a4,a4,848 # c350 +800005f8: 02e6d6b3 divu a3,a3,a4 +800005fc: c00027f3 rdcycle a5 +80000600: 02e7d7b3 divu a5,a5,a4 +80000604: 40d787b3 sub a5,a5,a3 +80000608: fea7cae3 blt a5,a0,800005fc +8000060c: 00008067 ret + +80000610 : +80000610: c0002573 rdcycle a0 +80000614: 0000c7b7 lui a5,0xc +80000618: 35078793 addi a5,a5,848 # c350 +8000061c: 02f55533 divu a0,a0,a5 +80000620: 00008067 ret + +80000624
: +80000624: 80002537 lui a0,0x80002 +80000628: fe010113 addi sp,sp,-32 +8000062c: ac450513 addi a0,a0,-1340 # 80001ac4 <__modsi3+0x140> +80000630: 00112e23 sw ra,28(sp) +80000634: 00812c23 sw s0,24(sp) +80000638: 00912a23 sw s1,20(sp) +8000063c: 01212823 sw s2,16(sp) +80000640: 01312623 sw s3,12(sp) +80000644: 355000ef jal 80001198 +80000648: 80002537 lui a0,0x80002 +8000064c: acc50513 addi a0,a0,-1332 # 80001acc <__modsi3+0x148> +80000650: 349000ef jal 80001198 +80000654: 80002437 lui s0,0x80002 +80000658: df042703 lw a4,-528(s0) # 80001df0 +8000065c: 000017b7 lui a5,0x1 +80000660: 23478793 addi a5,a5,564 # 1234 +80000664: 02f70263 beq a4,a5,80000688 +80000668: 80002637 lui a2,0x80002 +8000066c: 800025b7 lui a1,0x80002 +80000670: 80002537 lui a0,0x80002 +80000674: 02100693 li a3,33 +80000678: ae060613 addi a2,a2,-1312 # 80001ae0 <__modsi3+0x15c> +8000067c: ae858593 addi a1,a1,-1304 # 80001ae8 <__modsi3+0x164> +80000680: a5850513 addi a0,a0,-1448 # 80001a58 <__modsi3+0xd4> +80000684: f2dff0ef jal 800005b0 +80000688: 800024b7 lui s1,0x80002 +8000068c: e484a783 lw a5,-440(s1) # 80001e48 +80000690: 04079ee3 bnez a5,80000eec +80000694: 80002537 lui a0,0x80002 +80000698: b0450513 addi a0,a0,-1276 # 80001b04 <__modsi3+0x180> +8000069c: 2fd000ef jal 80001198 +800006a0: df042683 lw a3,-528(s0) +800006a4: 000037b7 lui a5,0x3 +800006a8: 69c78793 addi a5,a5,1692 # 369c +800006ac: 00169713 slli a4,a3,0x1 +800006b0: 00d70733 add a4,a4,a3 +800006b4: dee42823 sw a4,-528(s0) +800006b8: df042703 lw a4,-528(s0) +800006bc: 02f70263 beq a4,a5,800006e0 +800006c0: 80002637 lui a2,0x80002 +800006c4: 800025b7 lui a1,0x80002 +800006c8: 80002537 lui a0,0x80002 +800006cc: 02600693 li a3,38 +800006d0: ae060613 addi a2,a2,-1312 # 80001ae0 <__modsi3+0x15c> +800006d4: b1058593 addi a1,a1,-1264 # 80001b10 <__modsi3+0x18c> +800006d8: a5850513 addi a0,a0,-1448 # 80001a58 <__modsi3+0xd4> +800006dc: ed5ff0ef jal 800005b0 +800006e0: fff00793 li a5,-1 +800006e4: def42823 sw a5,-528(s0) +800006e8: df042703 lw a4,-528(s0) +800006ec: ffd00693 li a3,-3 +800006f0: 00171793 slli a5,a4,0x1 +800006f4: 00e787b3 add a5,a5,a4 +800006f8: def42823 sw a5,-528(s0) +800006fc: df042783 lw a5,-528(s0) +80000700: 02d78263 beq a5,a3,80000724 +80000704: 80002637 lui a2,0x80002 +80000708: 800025b7 lui a1,0x80002 +8000070c: 80002537 lui a0,0x80002 +80000710: 02900693 li a3,41 +80000714: ae060613 addi a2,a2,-1312 # 80001ae0 <__modsi3+0x15c> +80000718: b2058593 addi a1,a1,-1248 # 80001b20 <__modsi3+0x19c> +8000071c: a5850513 addi a0,a0,-1448 # 80001a58 <__modsi3+0xd4> +80000720: e91ff0ef jal 800005b0 +80000724: ffb00793 li a5,-5 +80000728: def42823 sw a5,-528(s0) +8000072c: df042703 lw a4,-528(s0) +80000730: fbf00693 li a3,-65 +80000734: 00171793 slli a5,a4,0x1 +80000738: 00e787b3 add a5,a5,a4 +8000073c: 00279793 slli a5,a5,0x2 +80000740: 00e787b3 add a5,a5,a4 +80000744: def42823 sw a5,-528(s0) +80000748: df042783 lw a5,-528(s0) +8000074c: 02d78263 beq a5,a3,80000770 +80000750: 80002637 lui a2,0x80002 +80000754: 800025b7 lui a1,0x80002 +80000758: 80002537 lui a0,0x80002 +8000075c: 02c00693 li a3,44 +80000760: ae060613 addi a2,a2,-1312 # 80001ae0 <__modsi3+0x15c> +80000764: b2c58593 addi a1,a1,-1236 # 80001b2c <__modsi3+0x1a8> +80000768: a5850513 addi a0,a0,-1448 # 80001a58 <__modsi3+0xd4> +8000076c: e45ff0ef jal 800005b0 +80000770: ffb00793 li a5,-5 +80000774: def42823 sw a5,-528(s0) +80000778: df042703 lw a4,-528(s0) +8000077c: 04100693 li a3,65 +80000780: 00371793 slli a5,a4,0x3 +80000784: 40f707b3 sub a5,a4,a5 +80000788: 00179793 slli a5,a5,0x1 +8000078c: 00e787b3 add a5,a5,a4 +80000790: def42823 sw a5,-528(s0) +80000794: df042783 lw a5,-528(s0) +80000798: 02d78263 beq a5,a3,800007bc +8000079c: 80002637 lui a2,0x80002 +800007a0: 800025b7 lui a1,0x80002 +800007a4: 80002537 lui a0,0x80002 +800007a8: 02f00693 li a3,47 +800007ac: ae060613 addi a2,a2,-1312 # 80001ae0 <__modsi3+0x15c> +800007b0: b3858593 addi a1,a1,-1224 # 80001b38 <__modsi3+0x1b4> +800007b4: a5850513 addi a0,a0,-1448 # 80001a58 <__modsi3+0xd4> +800007b8: df9ff0ef jal 800005b0 +800007bc: f8a957b7 lui a5,0xf8a95 +800007c0: 92978793 addi a5,a5,-1751 # f8a94929 <_end+0x78a91ad9> +800007c4: def42823 sw a5,-528(s0) +800007c8: df042703 lw a4,-528(s0) +800007cc: 009387b7 lui a5,0x938 +800007d0: 83378793 addi a5,a5,-1997 # 937833 +800007d4: 02f70733 mul a4,a4,a5 +800007d8: e68fd7b7 lui a5,0xe68fd +800007dc: b2b78793 addi a5,a5,-1237 # e68fcb2b <_end+0x668f9cdb> +800007e0: dee42823 sw a4,-528(s0) +800007e4: df042703 lw a4,-528(s0) +800007e8: 02f70263 beq a4,a5,8000080c +800007ec: 80002637 lui a2,0x80002 +800007f0: 800025b7 lui a1,0x80002 +800007f4: 80002537 lui a0,0x80002 +800007f8: 03200693 li a3,50 +800007fc: ae060613 addi a2,a2,-1312 # 80001ae0 <__modsi3+0x15c> +80000800: b4858593 addi a1,a1,-1208 # 80001b48 <__modsi3+0x1c4> +80000804: a5850513 addi a0,a0,-1448 # 80001a58 <__modsi3+0xd4> +80000808: da9ff0ef jal 800005b0 +8000080c: 80002537 lui a0,0x80002 +80000810: b6450513 addi a0,a0,-1180 # 80001b64 <__modsi3+0x1e0> +80000814: 185000ef jal 80001198 +80000818: 000037b7 lui a5,0x3 +8000081c: 69c78793 addi a5,a5,1692 # 369c +80000820: def42823 sw a5,-528(s0) +80000824: df042703 lw a4,-528(s0) +80000828: 00500793 li a5,5 +8000082c: 02f74733 div a4,a4,a5 +80000830: 000017b7 lui a5,0x1 +80000834: aec78793 addi a5,a5,-1300 # aec +80000838: dee42823 sw a4,-528(s0) +8000083c: df042703 lw a4,-528(s0) +80000840: 02f70263 beq a4,a5,80000864 +80000844: 80002637 lui a2,0x80002 +80000848: 800025b7 lui a1,0x80002 +8000084c: 80002537 lui a0,0x80002 +80000850: 03700693 li a3,55 +80000854: ae060613 addi a2,a2,-1312 # 80001ae0 <__modsi3+0x15c> +80000858: b7058593 addi a1,a1,-1168 # 80001b70 <__modsi3+0x1ec> +8000085c: a5850513 addi a0,a0,-1448 # 80001a58 <__modsi3+0xd4> +80000860: d51ff0ef jal 800005b0 +80000864: df042783 lw a5,-528(s0) +80000868: 06400693 li a3,100 +8000086c: 06000713 li a4,96 +80000870: 02d7e7b3 rem a5,a5,a3 +80000874: def42823 sw a5,-528(s0) +80000878: df042783 lw a5,-528(s0) +8000087c: 02e78263 beq a5,a4,800008a0 +80000880: 80002637 lui a2,0x80002 +80000884: 800025b7 lui a1,0x80002 +80000888: 80002537 lui a0,0x80002 +8000088c: 03900693 li a3,57 +80000890: ae060613 addi a2,a2,-1312 # 80001ae0 <__modsi3+0x15c> +80000894: b7c58593 addi a1,a1,-1156 # 80001b7c <__modsi3+0x1f8> +80000898: a5850513 addi a0,a0,-1448 # 80001a58 <__modsi3+0xd4> +8000089c: d15ff0ef jal 800005b0 +800008a0: b0700793 li a5,-1273 +800008a4: def42823 sw a5,-528(s0) +800008a8: df042783 lw a5,-528(s0) +800008ac: 01300693 li a3,19 +800008b0: fbd00713 li a4,-67 +800008b4: 02d7c7b3 div a5,a5,a3 +800008b8: def42823 sw a5,-528(s0) +800008bc: df042783 lw a5,-528(s0) +800008c0: 02e78263 beq a5,a4,800008e4 +800008c4: 80002637 lui a2,0x80002 +800008c8: 800025b7 lui a1,0x80002 +800008cc: 80002537 lui a0,0x80002 +800008d0: 03c00693 li a3,60 +800008d4: ae060613 addi a2,a2,-1312 # 80001ae0 <__modsi3+0x15c> +800008d8: b8858593 addi a1,a1,-1144 # 80001b88 <__modsi3+0x204> +800008dc: a5850513 addi a0,a0,-1448 # 80001a58 <__modsi3+0xd4> +800008e0: cd1ff0ef jal 800005b0 +800008e4: 80002537 lui a0,0x80002 +800008e8: b9450513 addi a0,a0,-1132 # 80001b94 <__modsi3+0x210> +800008ec: 0ad000ef jal 80001198 +800008f0: 00100793 li a5,1 +800008f4: def42823 sw a5,-528(s0) +800008f8: df042783 lw a5,-528(s0) +800008fc: 80000737 lui a4,0x80000 +80000900: 01f79793 slli a5,a5,0x1f +80000904: def42823 sw a5,-528(s0) +80000908: df042783 lw a5,-528(s0) +8000090c: 02e78263 beq a5,a4,80000930 +80000910: 80002637 lui a2,0x80002 +80000914: 800025b7 lui a1,0x80002 +80000918: 80002537 lui a0,0x80002 +8000091c: 04100693 li a3,65 +80000920: ae060613 addi a2,a2,-1312 # 80001ae0 <__modsi3+0x15c> +80000924: ba458593 addi a1,a1,-1116 # 80001ba4 <__modsi3+0x220> +80000928: a5850513 addi a0,a0,-1448 # 80001a58 <__modsi3+0xd4> +8000092c: c85ff0ef jal 800005b0 +80000930: 80002537 lui a0,0x80002 +80000934: bb850513 addi a0,a0,-1096 # 80001bb8 <__modsi3+0x234> +80000938: 061000ef jal 80001198 +8000093c: 800007b7 lui a5,0x80000 +80000940: e4f4a423 sw a5,-440(s1) +80000944: e484a783 lw a5,-440(s1) +80000948: 40000737 lui a4,0x40000 +8000094c: 0017d793 srli a5,a5,0x1 +80000950: e4f4a423 sw a5,-440(s1) +80000954: e484a783 lw a5,-440(s1) +80000958: 00e78a63 beq a5,a4,8000096c +8000095c: e484a583 lw a1,-440(s1) +80000960: 80002537 lui a0,0x80002 +80000964: bc850513 addi a0,a0,-1080 # 80001bc8 <__modsi3+0x244> +80000968: 435000ef jal 8000159c +8000096c: e484a703 lw a4,-440(s1) +80000970: 400007b7 lui a5,0x40000 +80000974: 02f70263 beq a4,a5,80000998 +80000978: 80002637 lui a2,0x80002 +8000097c: 800025b7 lui a1,0x80002 +80000980: 80002537 lui a0,0x80002 +80000984: 04800693 li a3,72 +80000988: ae060613 addi a2,a2,-1312 # 80001ae0 <__modsi3+0x15c> +8000098c: bcc58593 addi a1,a1,-1076 # 80001bcc <__modsi3+0x248> +80000990: a5850513 addi a0,a0,-1448 # 80001a58 <__modsi3+0xd4> +80000994: c1dff0ef jal 800005b0 +80000998: e484a783 lw a5,-440(s1) +8000099c: 00100713 li a4,1 +800009a0: 01e7d793 srli a5,a5,0x1e +800009a4: e4f4a423 sw a5,-440(s1) +800009a8: e484a783 lw a5,-440(s1) +800009ac: 02e78263 beq a5,a4,800009d0 +800009b0: 80002637 lui a2,0x80002 +800009b4: 800025b7 lui a1,0x80002 +800009b8: 80002537 lui a0,0x80002 +800009bc: 04a00693 li a3,74 +800009c0: ae060613 addi a2,a2,-1312 # 80001ae0 <__modsi3+0x15c> +800009c4: be058593 addi a1,a1,-1056 # 80001be0 <__modsi3+0x25c> +800009c8: a5850513 addi a0,a0,-1448 # 80001a58 <__modsi3+0xd4> +800009cc: be5ff0ef jal 800005b0 +800009d0: 80002537 lui a0,0x80002 +800009d4: bf450513 addi a0,a0,-1036 # 80001bf4 <__modsi3+0x270> +800009d8: 7c0000ef jal 80001198 +800009dc: 800007b7 lui a5,0x80000 +800009e0: def42823 sw a5,-528(s0) +800009e4: df042783 lw a5,-528(s0) +800009e8: c0000737 lui a4,0xc0000 +800009ec: 4017d793 srai a5,a5,0x1 +800009f0: def42823 sw a5,-528(s0) +800009f4: df042783 lw a5,-528(s0) +800009f8: 02e78263 beq a5,a4,80000a1c +800009fc: 80002637 lui a2,0x80002 +80000a00: 800025b7 lui a1,0x80002 +80000a04: 80002537 lui a0,0x80002 +80000a08: 04f00693 li a3,79 +80000a0c: ae060613 addi a2,a2,-1312 # 80001ae0 <__modsi3+0x15c> +80000a10: c1058593 addi a1,a1,-1008 # 80001c10 <__modsi3+0x28c> +80000a14: a5850513 addi a0,a0,-1448 # 80001a58 <__modsi3+0xd4> +80000a18: b99ff0ef jal 800005b0 +80000a1c: 80002537 lui a0,0x80002 +80000a20: c2450513 addi a0,a0,-988 # 80001c24 <__modsi3+0x2a0> +80000a24: 774000ef jal 80001198 +80000a28: fff00793 li a5,-1 +80000a2c: def42823 sw a5,-528(s0) +80000a30: df042783 lw a5,-528(s0) +80000a34: 02f05263 blez a5,80000a58 +80000a38: 80002637 lui a2,0x80002 +80000a3c: 800025b7 lui a1,0x80002 +80000a40: 80002537 lui a0,0x80002 +80000a44: 05300693 li a3,83 +80000a48: ae060613 addi a2,a2,-1312 # 80001ae0 <__modsi3+0x15c> +80000a4c: c3c58593 addi a1,a1,-964 # 80001c3c <__modsi3+0x2b8> +80000a50: a5850513 addi a0,a0,-1448 # 80001a58 <__modsi3+0xd4> +80000a54: b5dff0ef jal 800005b0 +80000a58: df042703 lw a4,-528(s0) +80000a5c: 00900793 li a5,9 +80000a60: 46e7c463 blt a5,a4,80000ec8 +80000a64: df042703 lw a4,-528(s0) +80000a68: 00a00793 li a5,10 +80000a6c: 42e7cc63 blt a5,a4,80000ea4 +80000a70: df042703 lw a4,-528(s0) +80000a74: ffe00793 li a5,-2 +80000a78: 40f74463 blt a4,a5,80000e80 +80000a7c: df042703 lw a4,-528(s0) +80000a80: ffd00793 li a5,-3 +80000a84: 3cf74c63 blt a4,a5,80000e5c +80000a88: 80002537 lui a0,0x80002 +80000a8c: c6c50513 addi a0,a0,-916 # 80001c6c <__modsi3+0x2e8> +80000a90: 708000ef jal 80001198 +80000a94: 123457b7 lui a5,0x12345 +80000a98: 67878793 addi a5,a5,1656 # 12345678 +80000a9c: e4f4a423 sw a5,-440(s1) +80000aa0: e484a703 lw a4,-440(s1) +80000aa4: 02f70263 beq a4,a5,80000ac8 +80000aa8: 80002637 lui a2,0x80002 +80000aac: 800025b7 lui a1,0x80002 +80000ab0: 80002537 lui a0,0x80002 +80000ab4: 05d00693 li a3,93 +80000ab8: ae060613 addi a2,a2,-1312 # 80001ae0 <__modsi3+0x15c> +80000abc: c7c58593 addi a1,a1,-900 # 80001c7c <__modsi3+0x2f8> +80000ac0: a5850513 addi a0,a0,-1448 # 80001a58 <__modsi3+0xd4> +80000ac4: aedff0ef jal 800005b0 +80000ac8: e484a703 lw a4,-440(s1) +80000acc: 000057b7 lui a5,0x5 +80000ad0: 67878793 addi a5,a5,1656 # 5678 +80000ad4: 01071713 slli a4,a4,0x10 +80000ad8: 01075713 srli a4,a4,0x10 +80000adc: 02f70263 beq a4,a5,80000b00 +80000ae0: 80002637 lui a2,0x80002 +80000ae4: 800025b7 lui a1,0x80002 +80000ae8: 80002537 lui a0,0x80002 +80000aec: 05f00693 li a3,95 +80000af0: ae060613 addi a2,a2,-1312 # 80001ae0 <__modsi3+0x15c> +80000af4: c9058593 addi a1,a1,-880 # 80001c90 <__modsi3+0x30c> +80000af8: a5850513 addi a0,a0,-1448 # 80001a58 <__modsi3+0xd4> +80000afc: ab5ff0ef jal 800005b0 +80000b00: e484d703 lhu a4,-440(s1) +80000b04: 000057b7 lui a5,0x5 +80000b08: 67878793 addi a5,a5,1656 # 5678 +80000b0c: 02f70263 beq a4,a5,80000b30 +80000b10: 80002637 lui a2,0x80002 +80000b14: 800025b7 lui a1,0x80002 +80000b18: 80002537 lui a0,0x80002 +80000b1c: 06100693 li a3,97 +80000b20: ae060613 addi a2,a2,-1312 # 80001ae0 <__modsi3+0x15c> +80000b24: ca058593 addi a1,a1,-864 # 80001ca0 <__modsi3+0x31c> +80000b28: a5850513 addi a0,a0,-1448 # 80001a58 <__modsi3+0xd4> +80000b2c: a85ff0ef jal 800005b0 +80000b30: e4848413 addi s0,s1,-440 +80000b34: 00245703 lhu a4,2(s0) +80000b38: 000017b7 lui a5,0x1 +80000b3c: 23478793 addi a5,a5,564 # 1234 +80000b40: 02f70263 beq a4,a5,80000b64 +80000b44: 80002637 lui a2,0x80002 +80000b48: 800025b7 lui a1,0x80002 +80000b4c: 80002537 lui a0,0x80002 +80000b50: 06200693 li a3,98 +80000b54: ae060613 addi a2,a2,-1312 # 80001ae0 <__modsi3+0x15c> +80000b58: cb458593 addi a1,a1,-844 # 80001cb4 <__modsi3+0x330> +80000b5c: a5850513 addi a0,a0,-1448 # 80001a58 <__modsi3+0xd4> +80000b60: a51ff0ef jal 800005b0 +80000b64: ffffd7b7 lui a5,0xffffd +80000b68: afe78793 addi a5,a5,-1282 # ffffcafe <_end+0x7fff9cae> +80000b6c: 00245703 lhu a4,2(s0) +80000b70: e4f49423 sh a5,-440(s1) +80000b74: 000017b7 lui a5,0x1 +80000b78: 23478793 addi a5,a5,564 # 1234 +80000b7c: 02f70263 beq a4,a5,80000ba0 +80000b80: 80002637 lui a2,0x80002 +80000b84: 800025b7 lui a1,0x80002 +80000b88: 80002537 lui a0,0x80002 +80000b8c: 06600693 li a3,102 +80000b90: ae060613 addi a2,a2,-1312 # 80001ae0 <__modsi3+0x15c> +80000b94: cb458593 addi a1,a1,-844 # 80001cb4 <__modsi3+0x330> +80000b98: a5850513 addi a0,a0,-1448 # 80001a58 <__modsi3+0xd4> +80000b9c: a15ff0ef jal 800005b0 +80000ba0: ffffc7b7 lui a5,0xffffc +80000ba4: abe78793 addi a5,a5,-1346 # ffffbabe <_end+0x7fff8c6e> +80000ba8: e484d703 lhu a4,-440(s1) +80000bac: 00f41123 sh a5,2(s0) +80000bb0: 0000d7b7 lui a5,0xd +80000bb4: afe78793 addi a5,a5,-1282 # cafe +80000bb8: 24f71c63 bne a4,a5,80000e10 +80000bbc: 80002537 lui a0,0x80002 +80000bc0: cf050513 addi a0,a0,-784 # 80001cf0 <__modsi3+0x36c> +80000bc4: 5d4000ef jal 80001198 +80000bc8: 123457b7 lui a5,0x12345 +80000bcc: 67878793 addi a5,a5,1656 # 12345678 +80000bd0: e4f4a423 sw a5,-440(s1) +80000bd4: e484a703 lw a4,-440(s1) +80000bd8: 02f70263 beq a4,a5,80000bfc +80000bdc: 80002637 lui a2,0x80002 +80000be0: 800025b7 lui a1,0x80002 +80000be4: 80002537 lui a0,0x80002 +80000be8: 06f00693 li a3,111 +80000bec: ae060613 addi a2,a2,-1312 # 80001ae0 <__modsi3+0x15c> +80000bf0: c7c58593 addi a1,a1,-900 # 80001c7c <__modsi3+0x2f8> +80000bf4: a5850513 addi a0,a0,-1448 # 80001a58 <__modsi3+0xd4> +80000bf8: 9b9ff0ef jal 800005b0 +80000bfc: e484a783 lw a5,-440(s1) +80000c00: 07800713 li a4,120 +80000c04: 0ff7f793 zext.b a5,a5 +80000c08: 02e78263 beq a5,a4,80000c2c +80000c0c: 80002637 lui a2,0x80002 +80000c10: 800025b7 lui a1,0x80002 +80000c14: 80002537 lui a0,0x80002 +80000c18: 07100693 li a3,113 +80000c1c: ae060613 addi a2,a2,-1312 # 80001ae0 <__modsi3+0x15c> +80000c20: d0058593 addi a1,a1,-768 # 80001d00 <__modsi3+0x37c> +80000c24: a5850513 addi a0,a0,-1448 # 80001a58 <__modsi3+0xd4> +80000c28: 989ff0ef jal 800005b0 +80000c2c: e484c703 lbu a4,-440(s1) +80000c30: 07800793 li a5,120 +80000c34: 02f70263 beq a4,a5,80000c58 +80000c38: 80002637 lui a2,0x80002 +80000c3c: 800025b7 lui a1,0x80002 +80000c40: 80002537 lui a0,0x80002 +80000c44: 07300693 li a3,115 +80000c48: ae060613 addi a2,a2,-1312 # 80001ae0 <__modsi3+0x15c> +80000c4c: d0c58593 addi a1,a1,-756 # 80001d0c <__modsi3+0x388> +80000c50: a5850513 addi a0,a0,-1448 # 80001a58 <__modsi3+0xd4> +80000c54: 95dff0ef jal 800005b0 +80000c58: 00144703 lbu a4,1(s0) +80000c5c: 05600793 li a5,86 +80000c60: 02f70263 beq a4,a5,80000c84 +80000c64: 80002637 lui a2,0x80002 +80000c68: 800025b7 lui a1,0x80002 +80000c6c: 80002537 lui a0,0x80002 +80000c70: 07400693 li a3,116 +80000c74: ae060613 addi a2,a2,-1312 # 80001ae0 <__modsi3+0x15c> +80000c78: d1c58593 addi a1,a1,-740 # 80001d1c <__modsi3+0x398> +80000c7c: a5850513 addi a0,a0,-1448 # 80001a58 <__modsi3+0xd4> +80000c80: 931ff0ef jal 800005b0 +80000c84: 00244703 lbu a4,2(s0) +80000c88: 03400793 li a5,52 +80000c8c: 02f70263 beq a4,a5,80000cb0 +80000c90: 80002637 lui a2,0x80002 +80000c94: 800025b7 lui a1,0x80002 +80000c98: 80002537 lui a0,0x80002 +80000c9c: 07500693 li a3,117 +80000ca0: ae060613 addi a2,a2,-1312 # 80001ae0 <__modsi3+0x15c> +80000ca4: d2c58593 addi a1,a1,-724 # 80001d2c <__modsi3+0x3a8> +80000ca8: a5850513 addi a0,a0,-1448 # 80001a58 <__modsi3+0xd4> +80000cac: 905ff0ef jal 800005b0 +80000cb0: 00344703 lbu a4,3(s0) +80000cb4: 01200793 li a5,18 +80000cb8: 02f70263 beq a4,a5,80000cdc +80000cbc: 80002637 lui a2,0x80002 +80000cc0: 800025b7 lui a1,0x80002 +80000cc4: 80002537 lui a0,0x80002 +80000cc8: 07600693 li a3,118 +80000ccc: ae060613 addi a2,a2,-1312 # 80001ae0 <__modsi3+0x15c> +80000cd0: d3c58593 addi a1,a1,-708 # 80001d3c <__modsi3+0x3b8> +80000cd4: a5850513 addi a0,a0,-1448 # 80001a58 <__modsi3+0xd4> +80000cd8: 8d9ff0ef jal 800005b0 +80000cdc: fab00793 li a5,-85 +80000ce0: e4f48423 sb a5,-440(s1) +80000ce4: e484a703 lw a4,-440(s1) +80000ce8: 123457b7 lui a5,0x12345 +80000cec: 6ab78793 addi a5,a5,1707 # 123456ab +80000cf0: 02f70263 beq a4,a5,80000d14 +80000cf4: 80002637 lui a2,0x80002 +80000cf8: 800025b7 lui a1,0x80002 +80000cfc: 80002537 lui a0,0x80002 +80000d00: 07900693 li a3,121 +80000d04: ae060613 addi a2,a2,-1312 # 80001ae0 <__modsi3+0x15c> +80000d08: d4c58593 addi a1,a1,-692 # 80001d4c <__modsi3+0x3c8> +80000d0c: a5850513 addi a0,a0,-1448 # 80001a58 <__modsi3+0xd4> +80000d10: 8a1ff0ef jal 800005b0 +80000d14: fcd00793 li a5,-51 +80000d18: 00f400a3 sb a5,1(s0) +80000d1c: e484a703 lw a4,-440(s1) +80000d20: 1234d7b7 lui a5,0x1234d +80000d24: dab78793 addi a5,a5,-597 # 1234cdab +80000d28: 02f70263 beq a4,a5,80000d4c +80000d2c: 80002637 lui a2,0x80002 +80000d30: 800025b7 lui a1,0x80002 +80000d34: 80002537 lui a0,0x80002 +80000d38: 07b00693 li a3,123 +80000d3c: ae060613 addi a2,a2,-1312 # 80001ae0 <__modsi3+0x15c> +80000d40: d6058593 addi a1,a1,-672 # 80001d60 <__modsi3+0x3dc> +80000d44: a5850513 addi a0,a0,-1448 # 80001a58 <__modsi3+0xd4> +80000d48: 869ff0ef jal 800005b0 +80000d4c: fef00793 li a5,-17 +80000d50: 00f40123 sb a5,2(s0) +80000d54: e484a703 lw a4,-440(s1) +80000d58: 12efd7b7 lui a5,0x12efd +80000d5c: dab78793 addi a5,a5,-597 # 12efcdab +80000d60: 02f70263 beq a4,a5,80000d84 +80000d64: 80002637 lui a2,0x80002 +80000d68: 800025b7 lui a1,0x80002 +80000d6c: 80002537 lui a0,0x80002 +80000d70: 07d00693 li a3,125 +80000d74: ae060613 addi a2,a2,-1312 # 80001ae0 <__modsi3+0x15c> +80000d78: d7458593 addi a1,a1,-652 # 80001d74 <__modsi3+0x3f0> +80000d7c: a5850513 addi a0,a0,-1448 # 80001a58 <__modsi3+0xd4> +80000d80: 831ff0ef jal 800005b0 +80000d84: 00100793 li a5,1 +80000d88: 00f401a3 sb a5,3(s0) +80000d8c: e484a703 lw a4,-440(s1) +80000d90: 01efd7b7 lui a5,0x1efd +80000d94: dab78793 addi a5,a5,-597 # 1efcdab +80000d98: 02f70263 beq a4,a5,80000dbc +80000d9c: 80002637 lui a2,0x80002 +80000da0: 800025b7 lui a1,0x80002 +80000da4: 80002537 lui a0,0x80002 +80000da8: 07f00693 li a3,127 +80000dac: ae060613 addi a2,a2,-1312 # 80001ae0 <__modsi3+0x15c> +80000db0: d8858593 addi a1,a1,-632 # 80001d88 <__modsi3+0x404> +80000db4: a5850513 addi a0,a0,-1448 # 80001a58 <__modsi3+0xd4> +80000db8: ff8ff0ef jal 800005b0 +80000dbc: 80002537 lui a0,0x80002 +80000dc0: d9c50513 addi a0,a0,-612 # 80001d9c <__modsi3+0x418> +80000dc4: 3d4000ef jal 80001198 +80000dc8: 000027b7 lui a5,0x2 +80000dcc: 80002737 lui a4,0x80002 +80000dd0: db978793 addi a5,a5,-583 # 1db9 +80000dd4: e4f72223 sw a5,-444(a4) # 80001e44 +80000dd8: e4472603 lw a2,-444(a4) +80000ddc: 000107b7 lui a5,0x10 +80000de0: ff778693 addi a3,a5,-9 # fff7 +80000de4: 00c6f663 bgeu a3,a2,80000df0 +80000de8: e4472703 lw a4,-444(a4) +80000dec: 12f76263 bltu a4,a5,80000f10 +80000df0: 01c12083 lw ra,28(sp) +80000df4: 01812403 lw s0,24(sp) +80000df8: 01412483 lw s1,20(sp) +80000dfc: 01012903 lw s2,16(sp) +80000e00: 00c12983 lw s3,12(sp) +80000e04: 00000513 li a0,0 +80000e08: 02010113 addi sp,sp,32 +80000e0c: 00008067 ret +80000e10: 800029b7 lui s3,0x80002 +80000e14: 80002937 lui s2,0x80002 +80000e18: 800025b7 lui a1,0x80002 +80000e1c: 06a00693 li a3,106 +80000e20: ae098613 addi a2,s3,-1312 # 80001ae0 <__modsi3+0x15c> +80000e24: cc858593 addi a1,a1,-824 # 80001cc8 <__modsi3+0x344> +80000e28: a5890513 addi a0,s2,-1448 # 80001a58 <__modsi3+0xd4> +80000e2c: f84ff0ef jal 800005b0 +80000e30: 00245703 lhu a4,2(s0) +80000e34: 0000c7b7 lui a5,0xc +80000e38: abe78793 addi a5,a5,-1346 # babe +80000e3c: d8f700e3 beq a4,a5,80000bbc +80000e40: 800025b7 lui a1,0x80002 +80000e44: 06b00693 li a3,107 +80000e48: ae098613 addi a2,s3,-1312 +80000e4c: cdc58593 addi a1,a1,-804 # 80001cdc <__modsi3+0x358> +80000e50: a5890513 addi a0,s2,-1448 +80000e54: f5cff0ef jal 800005b0 +80000e58: d65ff06f j 80000bbc +80000e5c: 80002637 lui a2,0x80002 +80000e60: 800025b7 lui a1,0x80002 +80000e64: 80002537 lui a0,0x80002 +80000e68: 05900693 li a3,89 +80000e6c: ae060613 addi a2,a2,-1312 # 80001ae0 <__modsi3+0x15c> +80000e70: c6058593 addi a1,a1,-928 # 80001c60 <__modsi3+0x2dc> +80000e74: a5850513 addi a0,a0,-1448 # 80001a58 <__modsi3+0xd4> +80000e78: f38ff0ef jal 800005b0 +80000e7c: c0dff06f j 80000a88 +80000e80: 80002637 lui a2,0x80002 +80000e84: 800025b7 lui a1,0x80002 +80000e88: 80002537 lui a0,0x80002 +80000e8c: 05800693 li a3,88 +80000e90: ae060613 addi a2,a2,-1312 # 80001ae0 <__modsi3+0x15c> +80000e94: c5858593 addi a1,a1,-936 # 80001c58 <__modsi3+0x2d4> +80000e98: a5850513 addi a0,a0,-1448 # 80001a58 <__modsi3+0xd4> +80000e9c: f14ff0ef jal 800005b0 +80000ea0: bddff06f j 80000a7c +80000ea4: 80002637 lui a2,0x80002 +80000ea8: 800025b7 lui a1,0x80002 +80000eac: 80002537 lui a0,0x80002 +80000eb0: 05600693 li a3,86 +80000eb4: ae060613 addi a2,a2,-1312 # 80001ae0 <__modsi3+0x15c> +80000eb8: c4c58593 addi a1,a1,-948 # 80001c4c <__modsi3+0x2c8> +80000ebc: a5850513 addi a0,a0,-1448 # 80001a58 <__modsi3+0xd4> +80000ec0: ef0ff0ef jal 800005b0 +80000ec4: badff06f j 80000a70 +80000ec8: 80002637 lui a2,0x80002 +80000ecc: 800025b7 lui a1,0x80002 +80000ed0: 80002537 lui a0,0x80002 +80000ed4: 05500693 li a3,85 +80000ed8: ae060613 addi a2,a2,-1312 # 80001ae0 <__modsi3+0x15c> +80000edc: c4458593 addi a1,a1,-956 # 80001c44 <__modsi3+0x2c0> +80000ee0: a5850513 addi a0,a0,-1448 # 80001a58 <__modsi3+0xd4> +80000ee4: eccff0ef jal 800005b0 +80000ee8: b7dff06f j 80000a64 +80000eec: 80002637 lui a2,0x80002 +80000ef0: 800025b7 lui a1,0x80002 +80000ef4: 80002537 lui a0,0x80002 +80000ef8: 02200693 li a3,34 +80000efc: ae060613 addi a2,a2,-1312 # 80001ae0 <__modsi3+0x15c> +80000f00: af858593 addi a1,a1,-1288 # 80001af8 <__modsi3+0x174> +80000f04: a5850513 addi a0,a0,-1448 # 80001a58 <__modsi3+0xd4> +80000f08: ea8ff0ef jal 800005b0 +80000f0c: f88ff06f j 80000694 +80000f10: 80002537 lui a0,0x80002 +80000f14: dac50513 addi a0,a0,-596 # 80001dac <__modsi3+0x428> +80000f18: 280000ef jal 80001198 +80000f1c: 80002637 lui a2,0x80002 +80000f20: 800025b7 lui a1,0x80002 +80000f24: 80002537 lui a0,0x80002 +80000f28: 08600693 li a3,134 +80000f2c: ae060613 addi a2,a2,-1312 # 80001ae0 <__modsi3+0x15c> +80000f30: bb458593 addi a1,a1,-1100 # 80001bb4 <__modsi3+0x230> +80000f34: a5850513 addi a0,a0,-1448 # 80001a58 <__modsi3+0xd4> +80000f38: e78ff0ef jal 800005b0 +80000f3c: eb5ff06f j 80000df0 + +80000f40 : +80000f40: 00052303 lw t1,0(a0) +80000f44: 00030663 beqz t1,80000f50 +80000f48: 00058513 mv a0,a1 +80000f4c: 00030067 jr t1 +80000f50: 00452703 lw a4,4(a0) +80000f54: 02070063 beqz a4,80000f74 +80000f58: 00852683 lw a3,8(a0) +80000f5c: 00c52603 lw a2,12(a0) +80000f60: 00c6da63 bge a3,a2,80000f74 +80000f64: 00168613 addi a2,a3,1 +80000f68: 00c52423 sw a2,8(a0) +80000f6c: 00d70733 add a4,a4,a3 +80000f70: 00b70023 sb a1,0(a4) +80000f74: 00008067 ret + +80000f78 : +80000f78: 01062783 lw a5,16(a2) +80000f7c: 04078263 beqz a5,80000fc0 +80000f80: 04058063 beqz a1,80000fc0 +80000f84: ff010113 addi sp,sp,-16 +80000f88: 00912223 sw s1,4(sp) +80000f8c: 00462783 lw a5,4(a2) +80000f90: 00062483 lw s1,0(a2) +80000f94: 00812423 sw s0,8(sp) +80000f98: 01212023 sw s2,0(sp) +80000f9c: 00112623 sw ra,12(sp) +80000fa0: 00060413 mv s0,a2 +80000fa4: 00050913 mv s2,a0 +80000fa8: 02f4c863 blt s1,a5,80000fd8 +80000fac: 00c12083 lw ra,12(sp) +80000fb0: 00812403 lw s0,8(sp) +80000fb4: 00412483 lw s1,4(sp) +80000fb8: 00012903 lw s2,0(sp) +80000fbc: 01010113 addi sp,sp,16 +80000fc0: 00008067 ret +80000fc4: 00c44583 lbu a1,12(s0) +80000fc8: 00090513 mv a0,s2 +80000fcc: 00148493 addi s1,s1,1 +80000fd0: 00000317 auipc t1,0x0 +80000fd4: f70300e7 jalr -144(t1) # 80000f40 +80000fd8: 00442783 lw a5,4(s0) +80000fdc: fef4c4e3 blt s1,a5,80000fc4 +80000fe0: fcdff06f j 80000fac + +80000fe4 : +80000fe4: f8010113 addi sp,sp,-128 +80000fe8: 06912a23 sw s1,116(sp) +80000fec: 00058493 mv s1,a1 +80000ff0: 800025b7 lui a1,0x80002 +80000ff4: 07412423 sw s4,104(sp) +80000ff8: 07612023 sw s6,96(sp) +80000ffc: dc458593 addi a1,a1,-572 # 80001dc4 <__modsi3+0x440> +80001000: 00050b13 mv s6,a0 +80001004: 00060a13 mv s4,a2 +80001008: 00810513 addi a0,sp,8 +8000100c: 01100613 li a2,17 +80001010: 06112e23 sw ra,124(sp) +80001014: 07212823 sw s2,112(sp) +80001018: 06812c23 sw s0,120(sp) +8000101c: 00068913 mv s2,a3 +80001020: 07312623 sw s3,108(sp) +80001024: 07512223 sw s5,100(sp) +80001028: 05712e23 sw s7,92(sp) +8000102c: 00000317 auipc t1,0x0 +80001030: 7ec300e7 jalr 2028(t1) # 80001818 +80001034: 800025b7 lui a1,0x80002 +80001038: 01100613 li a2,17 +8000103c: dd858593 addi a1,a1,-552 # 80001dd8 <__modsi3+0x454> +80001040: 01c10513 addi a0,sp,28 +80001044: 00000317 auipc t1,0x0 +80001048: 7d4300e7 jalr 2004(t1) # 80001818 +8000104c: 00a00793 li a5,10 +80001050: 0efa1e63 bne s4,a5,8000114c +80001054: 0e04dc63 bgez s1,8000114c +80001058: 409004b3 neg s1,s1 +8000105c: 00100b93 li s7,1 +80001060: 01892783 lw a5,24(s2) +80001064: 00810993 addi s3,sp,8 +80001068: 00079463 bnez a5,80001070 +8000106c: 01c10993 addi s3,sp,28 +80001070: 03010a93 addi s5,sp,48 +80001074: 00a00793 li a5,10 +80001078: 000a8413 mv s0,s5 +8000107c: 0cfa1c63 bne s4,a5,80001154 +80001080: 000a0593 mv a1,s4 +80001084: 00048513 mv a0,s1 +80001088: 00001317 auipc t1,0x1 +8000108c: 8f0300e7 jalr -1808(t1) # 80001978 <__umodsi3> +80001090: 00a98533 add a0,s3,a0 +80001094: 00054783 lbu a5,0(a0) +80001098: 00140413 addi s0,s0,1 +8000109c: 00048513 mv a0,s1 +800010a0: fef40fa3 sb a5,-1(s0) +800010a4: 000a0593 mv a1,s4 +800010a8: 00001317 auipc t1,0x1 +800010ac: 840300e7 jalr -1984(t1) # 800018e8 <__udivsi3> +800010b0: 00050493 mv s1,a0 +800010b4: fc0516e3 bnez a0,80001080 +800010b8: 000b8863 beqz s7,800010c8 +800010bc: 02d00793 li a5,45 +800010c0: 00f40023 sb a5,0(s0) +800010c4: 00140413 addi s0,s0,1 +800010c8: 00040023 sb zero,0(s0) +800010cc: 000a8513 mv a0,s5 +800010d0: 00000317 auipc t1,0x0 +800010d4: 6f8300e7 jalr 1784(t1) # 800017c8 +800010d8: 01492583 lw a1,20(s2) +800010dc: 00a92023 sw a0,0(s2) +800010e0: 00090613 mv a2,s2 +800010e4: 0015b593 seqz a1,a1 +800010e8: 000b0513 mv a0,s6 +800010ec: fff40493 addi s1,s0,-1 +800010f0: 00000317 auipc t1,0x0 +800010f4: e88300e7 jalr -376(t1) # 80000f78 +800010f8: fff4c793 not a5,s1 +800010fc: 00f407b3 add a5,s0,a5 +80001100: 0154e663 bltu s1,s5,8000110c +80001104: 01c92703 lw a4,28(s2) +80001108: 06e7c663 blt a5,a4,80001174 +8000110c: 01492583 lw a1,20(s2) +80001110: 00090613 mv a2,s2 +80001114: 000b0513 mv a0,s6 +80001118: 00000317 auipc t1,0x0 +8000111c: e60300e7 jalr -416(t1) # 80000f78 +80001120: 07c12083 lw ra,124(sp) +80001124: 07812403 lw s0,120(sp) +80001128: 07412483 lw s1,116(sp) +8000112c: 07012903 lw s2,112(sp) +80001130: 06c12983 lw s3,108(sp) +80001134: 06812a03 lw s4,104(sp) +80001138: 06412a83 lw s5,100(sp) +8000113c: 06012b03 lw s6,96(sp) +80001140: 05c12b83 lw s7,92(sp) +80001144: 08010113 addi sp,sp,128 +80001148: 00008067 ret +8000114c: 00000b93 li s7,0 +80001150: f11ff06f j 80001060 +80001154: 00f4f793 andi a5,s1,15 +80001158: 00f987b3 add a5,s3,a5 +8000115c: 0007c783 lbu a5,0(a5) +80001160: 00140413 addi s0,s0,1 +80001164: 0044d493 srli s1,s1,0x4 +80001168: fef40fa3 sb a5,-1(s0) +8000116c: fe0494e3 bnez s1,80001154 +80001170: f49ff06f j 800010b8 +80001174: fff48493 addi s1,s1,-1 +80001178: 0014c583 lbu a1,1(s1) +8000117c: 000b0513 mv a0,s6 +80001180: 00000317 auipc t1,0x0 +80001184: dc0300e7 jalr -576(t1) # 80000f40 +80001188: f71ff06f j 800010f8 + +8000118c : +8000118c: 800027b7 lui a5,0x80002 +80001190: e4a7a023 sw a0,-448(a5) # 80001e40 <_stdout> +80001194: 00008067 ret + +80001198 : +80001198: ff010113 addi sp,sp,-16 +8000119c: 00812423 sw s0,8(sp) +800011a0: 80002437 lui s0,0x80002 +800011a4: e4042783 lw a5,-448(s0) # 80001e40 <_stdout> +800011a8: 00912223 sw s1,4(sp) +800011ac: 00112623 sw ra,12(sp) +800011b0: 00050493 mv s1,a0 +800011b4: 02079463 bnez a5,800011dc +800011b8: 00c12083 lw ra,12(sp) +800011bc: fff00513 li a0,-1 +800011c0: 00812403 lw s0,8(sp) +800011c4: 00412483 lw s1,4(sp) +800011c8: 01010113 addi sp,sp,16 +800011cc: 00008067 ret +800011d0: e4042783 lw a5,-448(s0) +800011d4: 00148493 addi s1,s1,1 +800011d8: 000780e7 jalr a5 +800011dc: 0004c503 lbu a0,0(s1) +800011e0: fe0518e3 bnez a0,800011d0 +800011e4: e4042303 lw t1,-448(s0) +800011e8: 00c12083 lw ra,12(sp) +800011ec: 00812403 lw s0,8(sp) +800011f0: 00412483 lw s1,4(sp) +800011f4: 00a00513 li a0,10 +800011f8: 01010113 addi sp,sp,16 +800011fc: 00030067 jr t1 + +80001200 : +80001200: 800027b7 lui a5,0x80002 +80001204: e407a783 lw a5,-448(a5) # 80001e40 <_stdout> +80001208: ff010113 addi sp,sp,-16 +8000120c: 00812423 sw s0,8(sp) +80001210: 00112623 sw ra,12(sp) +80001214: fff00413 li s0,-1 +80001218: 00078863 beqz a5,80001228 +8000121c: 00050413 mv s0,a0 +80001220: 0ff57513 zext.b a0,a0 +80001224: 000780e7 jalr a5 +80001228: 00c12083 lw ra,12(sp) +8000122c: 00040513 mv a0,s0 +80001230: 00812403 lw s0,8(sp) +80001234: 01010113 addi sp,sp,16 +80001238: 00008067 ret + +8000123c : +8000123c: 000087b7 lui a5,0x8 +80001240: f9010113 addi sp,sp,-112 +80001244: fff78793 addi a5,a5,-1 # 7fff +80001248: 06812423 sw s0,104(sp) +8000124c: 06912223 sw s1,100(sp) +80001250: 07212023 sw s2,96(sp) +80001254: 05712623 sw s7,76(sp) +80001258: 05812423 sw s8,72(sp) +8000125c: 06112623 sw ra,108(sp) +80001260: 05312e23 sw s3,92(sp) +80001264: 05412c23 sw s4,88(sp) +80001268: 05512a23 sw s5,84(sp) +8000126c: 05612823 sw s6,80(sp) +80001270: 05912223 sw s9,68(sp) +80001274: 05a12023 sw s10,64(sp) +80001278: 03b12e23 sw s11,60(sp) +8000127c: 00050913 mv s2,a0 +80001280: 00060493 mv s1,a2 +80001284: 00058413 mv s0,a1 +80001288: 00f12423 sw a5,8(sp) +8000128c: 06300b93 li s7,99 +80001290: 07000c13 li s8,112 +80001294: 00044583 lbu a1,0(s0) +80001298: 04059263 bnez a1,800012dc +8000129c: 06c12083 lw ra,108(sp) +800012a0: 00000513 li a0,0 +800012a4: 06812403 lw s0,104(sp) +800012a8: 06412483 lw s1,100(sp) +800012ac: 06012903 lw s2,96(sp) +800012b0: 05c12983 lw s3,92(sp) +800012b4: 05812a03 lw s4,88(sp) +800012b8: 05412a83 lw s5,84(sp) +800012bc: 05012b03 lw s6,80(sp) +800012c0: 04c12b83 lw s7,76(sp) +800012c4: 04812c03 lw s8,72(sp) +800012c8: 04412c83 lw s9,68(sp) +800012cc: 04012d03 lw s10,64(sp) +800012d0: 03c12d83 lw s11,60(sp) +800012d4: 07010113 addi sp,sp,112 +800012d8: 00008067 ret +800012dc: 02500793 li a5,37 +800012e0: 00f58a63 beq a1,a5,800012f4 +800012e4: 00090513 mv a0,s2 +800012e8: 00000317 auipc t1,0x0 +800012ec: c58300e7 jalr -936(t1) # 80000f40 +800012f0: 1300006f j 80001420 +800012f4: 02000793 li a5,32 +800012f8: 00f10e23 sb a5,28(sp) +800012fc: 00812783 lw a5,8(sp) +80001300: 02012023 sw zero,32(sp) +80001304: 02012223 sw zero,36(sp) +80001308: 00f12c23 sw a5,24(sp) +8000130c: 00a00793 li a5,10 +80001310: 02f12623 sw a5,44(sp) +80001314: 00040a13 mv s4,s0 +80001318: 00000c93 li s9,0 +8000131c: 00900b13 li s6,9 +80001320: 06c00d93 li s11,108 +80001324: 00100993 li s3,1 +80001328: 02d00d13 li s10,45 +8000132c: 001a4583 lbu a1,1(s4) +80001330: 00140413 addi s0,s0,1 +80001334: fd058793 addi a5,a1,-48 +80001338: 0ff7f793 zext.b a5,a5 +8000133c: 0afb6463 bltu s6,a5,800013e4 +80001340: 040c8a63 beqz s9,80001394 +80001344: 00000513 li a0,0 +80001348: 00a00713 li a4,10 +8000134c: 00044a03 lbu s4,0(s0) +80001350: fd0a0a13 addi s4,s4,-48 +80001354: 0ffa7793 zext.b a5,s4 +80001358: 00fb7e63 bgeu s6,a5,80001374 +8000135c: 00a12c23 sw a0,24(sp) +80001360: fff40413 addi s0,s0,-1 +80001364: 0080006f j 8000136c +80001368: 00098c93 mv s9,s3 +8000136c: 00040a13 mv s4,s0 +80001370: fbdff06f j 8000132c +80001374: 00070593 mv a1,a4 +80001378: 00e12623 sw a4,12(sp) +8000137c: 00000317 auipc t1,0x0 +80001380: 4ec300e7 jalr 1260(t1) # 80001868 <__mulsi3> +80001384: 00140413 addi s0,s0,1 +80001388: 00aa0533 add a0,s4,a0 +8000138c: 00c12703 lw a4,12(sp) +80001390: fbdff06f j 8000134c +80001394: 03000793 li a5,48 +80001398: 00f59463 bne a1,a5,800013a0 +8000139c: 00b10e23 sb a1,28(sp) +800013a0: 00000513 li a0,0 +800013a4: 00a00713 li a4,10 +800013a8: 00044a03 lbu s4,0(s0) +800013ac: fd0a0a13 addi s4,s4,-48 +800013b0: 0ffa7793 zext.b a5,s4 +800013b4: 00fb7863 bgeu s6,a5,800013c4 +800013b8: 00a12a23 sw a0,20(sp) +800013bc: 03312023 sw s3,32(sp) +800013c0: fa1ff06f j 80001360 +800013c4: 00070593 mv a1,a4 +800013c8: 00e12623 sw a4,12(sp) +800013cc: 00000317 auipc t1,0x0 +800013d0: 49c300e7 jalr 1180(t1) # 80001868 <__mulsi3> +800013d4: 00140413 addi s0,s0,1 +800013d8: 00aa0533 add a0,s4,a0 +800013dc: 00c12703 lw a4,12(sp) +800013e0: fc9ff06f j 800013a8 +800013e4: fbf58713 addi a4,a1,-65 +800013e8: 0ff77713 zext.b a4,a4 +800013ec: 01a73793 sltiu a5,a4,26 +800013f0: 02f12423 sw a5,40(sp) +800013f4: 01900693 li a3,25 +800013f8: 00058793 mv a5,a1 +800013fc: 00e6e463 bltu a3,a4,80001404 +80001400: 02058793 addi a5,a1,32 +80001404: 15778863 beq a5,s7,80001554 +80001408: 04fbcc63 blt s7,a5,80001460 +8000140c: 09a78a63 beq a5,s10,800014a0 +80001410: 00fd4c63 blt s10,a5,80001428 +80001414: 02500713 li a4,37 +80001418: 00078593 mv a1,a5 +8000141c: ece784e3 beq a5,a4,800012e4 +80001420: 00140413 addi s0,s0,1 +80001424: e71ff06f j 80001294 +80001428: 02e00713 li a4,46 +8000142c: f2e78ee3 beq a5,a4,80001368 +80001430: 05c00713 li a4,92 +80001434: fee796e3 bne a5,a4,80001420 +80001438: 06800793 li a5,104 +8000143c: 14f58863 beq a1,a5,8000158c +80001440: 12b7e663 bltu a5,a1,8000156c +80001444: 06100793 li a5,97 +80001448: 12f58e63 beq a1,a5,80001584 +8000144c: 00090513 mv a0,s2 +80001450: 00000317 auipc t1,0x0 +80001454: af0300e7 jalr -1296(t1) # 80000f40 +80001458: 002a0413 addi s0,s4,2 +8000145c: f11ff06f j 8000136c +80001460: 03878463 beq a5,s8,80001488 +80001464: 00fc4a63 blt s8,a5,80001478 +80001468: 06400713 li a4,100 +8000146c: 02e78e63 beq a5,a4,800014a8 +80001470: efb78ee3 beq a5,s11,8000136c +80001474: fadff06f j 80001420 +80001478: 07300713 li a4,115 +8000147c: 04e78863 beq a5,a4,800014cc +80001480: 07800713 li a4,120 +80001484: f8e79ee3 bne a5,a4,80001420 +80001488: 00800793 li a5,8 +8000148c: 00448993 addi s3,s1,4 +80001490: 02f12623 sw a5,44(sp) +80001494: 01010693 addi a3,sp,16 +80001498: 01000613 li a2,16 +8000149c: 0180006f j 800014b4 +800014a0: 03312223 sw s3,36(sp) +800014a4: ec9ff06f j 8000136c +800014a8: 00448993 addi s3,s1,4 +800014ac: 01010693 addi a3,sp,16 +800014b0: 00a00613 li a2,10 +800014b4: 0004a583 lw a1,0(s1) +800014b8: 00090513 mv a0,s2 +800014bc: 00000317 auipc t1,0x0 +800014c0: b28300e7 jalr -1240(t1) # 80000fe4 +800014c4: 00098493 mv s1,s3 +800014c8: f59ff06f j 80001420 +800014cc: 00448993 addi s3,s1,4 +800014d0: 0004a483 lw s1,0(s1) +800014d4: 00048513 mv a0,s1 +800014d8: 00000317 auipc t1,0x0 +800014dc: 2f0300e7 jalr 752(t1) # 800017c8 +800014e0: 02412583 lw a1,36(sp) +800014e4: 00a12823 sw a0,16(sp) +800014e8: 01010613 addi a2,sp,16 +800014ec: 0015b593 seqz a1,a1 +800014f0: 00090513 mv a0,s2 +800014f4: 00000317 auipc t1,0x0 +800014f8: a84300e7 jalr -1404(t1) # 80000f78 +800014fc: 0004c783 lbu a5,0(s1) +80001500: 02079663 bnez a5,8000152c +80001504: 00048513 mv a0,s1 +80001508: 00000317 auipc t1,0x0 +8000150c: 2c0300e7 jalr 704(t1) # 800017c8 +80001510: 02412583 lw a1,36(sp) +80001514: 00a12823 sw a0,16(sp) +80001518: 01010613 addi a2,sp,16 +8000151c: 00090513 mv a0,s2 +80001520: 00000317 auipc t1,0x0 +80001524: a58300e7 jalr -1448(t1) # 80000f78 +80001528: f9dff06f j 800014c4 +8000152c: 01812783 lw a5,24(sp) +80001530: fff78713 addi a4,a5,-1 +80001534: 00e12c23 sw a4,24(sp) +80001538: fc0786e3 beqz a5,80001504 +8000153c: 00148493 addi s1,s1,1 +80001540: fff4c583 lbu a1,-1(s1) +80001544: 00090513 mv a0,s2 +80001548: 00000317 auipc t1,0x0 +8000154c: 9f8300e7 jalr -1544(t1) # 80000f40 +80001550: fadff06f j 800014fc +80001554: 0004c583 lbu a1,0(s1) +80001558: 00090513 mv a0,s2 +8000155c: 00448993 addi s3,s1,4 +80001560: 00000317 auipc t1,0x0 +80001564: 9e0300e7 jalr -1568(t1) # 80000f40 +80001568: f5dff06f j 800014c4 +8000156c: 06e00793 li a5,110 +80001570: 02f58263 beq a1,a5,80001594 +80001574: 07200793 li a5,114 +80001578: ecf59ae3 bne a1,a5,8000144c +8000157c: 00d00593 li a1,13 +80001580: ecdff06f j 8000144c +80001584: 00700593 li a1,7 +80001588: ec5ff06f j 8000144c +8000158c: 00800593 li a1,8 +80001590: ebdff06f j 8000144c +80001594: 00a00593 li a1,10 +80001598: eb5ff06f j 8000144c + +8000159c : +8000159c: fb010113 addi sp,sp,-80 +800015a0: 04f12223 sw a5,68(sp) +800015a4: 800027b7 lui a5,0x80002 +800015a8: e407a783 lw a5,-448(a5) # 80001e40 <_stdout> +800015ac: 02112623 sw ra,44(sp) +800015b0: 02b12a23 sw a1,52(sp) +800015b4: 02c12c23 sw a2,56(sp) +800015b8: 02d12e23 sw a3,60(sp) +800015bc: 04e12023 sw a4,64(sp) +800015c0: 05012423 sw a6,72(sp) +800015c4: 05112623 sw a7,76(sp) +800015c8: 02078c63 beqz a5,80001600 +800015cc: 00050593 mv a1,a0 +800015d0: 03410613 addi a2,sp,52 +800015d4: 01010513 addi a0,sp,16 +800015d8: 00c12623 sw a2,12(sp) +800015dc: 00f12823 sw a5,16(sp) +800015e0: 00012a23 sw zero,20(sp) +800015e4: 00012c23 sw zero,24(sp) +800015e8: 00012e23 sw zero,28(sp) +800015ec: 00000317 auipc t1,0x0 +800015f0: c50300e7 jalr -944(t1) # 8000123c +800015f4: 02c12083 lw ra,44(sp) +800015f8: 05010113 addi sp,sp,80 +800015fc: 00008067 ret +80001600: 00000513 li a0,0 +80001604: ff1ff06f j 800015f4 + +80001608 : +80001608: 04050663 beqz a0,80001654 +8000160c: fe010113 addi sp,sp,-32 +80001610: 00a12223 sw a0,4(sp) +80001614: 000087b7 lui a5,0x8 +80001618: 00010513 mv a0,sp +8000161c: 00112e23 sw ra,28(sp) +80001620: 00f12623 sw a5,12(sp) +80001624: 00012023 sw zero,0(sp) +80001628: 00012423 sw zero,8(sp) +8000162c: 00000317 auipc t1,0x0 +80001630: c10300e7 jalr -1008(t1) # 8000123c +80001634: 00812703 lw a4,8(sp) +80001638: 00412783 lw a5,4(sp) +8000163c: 00e787b3 add a5,a5,a4 +80001640: 00078023 sb zero,0(a5) # 8000 +80001644: 01c12083 lw ra,28(sp) +80001648: 00812503 lw a0,8(sp) +8000164c: 02010113 addi sp,sp,32 +80001650: 00008067 ret +80001654: 00000513 li a0,0 +80001658: 00008067 ret + +8000165c : +8000165c: 06050063 beqz a0,800016bc +80001660: 00058793 mv a5,a1 +80001664: 00000713 li a4,0 +80001668: 04058c63 beqz a1,800016c0 +8000166c: fe010113 addi sp,sp,-32 +80001670: 00a12223 sw a0,4(sp) +80001674: 00060593 mv a1,a2 +80001678: 00010513 mv a0,sp +8000167c: 00068613 mv a2,a3 +80001680: 00112e23 sw ra,28(sp) +80001684: 00f12623 sw a5,12(sp) +80001688: 00012023 sw zero,0(sp) +8000168c: 00012423 sw zero,8(sp) +80001690: 00000317 auipc t1,0x0 +80001694: bac300e7 jalr -1108(t1) # 8000123c +80001698: 00812703 lw a4,8(sp) +8000169c: 00412783 lw a5,4(sp) +800016a0: 00e787b3 add a5,a5,a4 +800016a4: 00078023 sb zero,0(a5) +800016a8: 00812703 lw a4,8(sp) +800016ac: 01c12083 lw ra,28(sp) +800016b0: 02010113 addi sp,sp,32 +800016b4: 00070513 mv a0,a4 +800016b8: 00008067 ret +800016bc: 00000713 li a4,0 +800016c0: 00070513 mv a0,a4 +800016c4: 00008067 ret + +800016c8 : +800016c8: fb010113 addi sp,sp,-80 +800016cc: 02112623 sw ra,44(sp) +800016d0: 02c12c23 sw a2,56(sp) +800016d4: 02d12e23 sw a3,60(sp) +800016d8: 04e12023 sw a4,64(sp) +800016dc: 04f12223 sw a5,68(sp) +800016e0: 05012423 sw a6,72(sp) +800016e4: 05112623 sw a7,76(sp) +800016e8: 04050663 beqz a0,80001734 +800016ec: 000087b7 lui a5,0x8 +800016f0: 03810613 addi a2,sp,56 +800016f4: 00a12a23 sw a0,20(sp) +800016f8: 01010513 addi a0,sp,16 +800016fc: 00f12e23 sw a5,28(sp) +80001700: 00c12623 sw a2,12(sp) +80001704: 00012823 sw zero,16(sp) +80001708: 00012c23 sw zero,24(sp) +8000170c: 00000317 auipc t1,0x0 +80001710: b30300e7 jalr -1232(t1) # 8000123c +80001714: 01812703 lw a4,24(sp) +80001718: 01412783 lw a5,20(sp) +8000171c: 00e787b3 add a5,a5,a4 +80001720: 00078023 sb zero,0(a5) # 8000 +80001724: 01812503 lw a0,24(sp) +80001728: 02c12083 lw ra,44(sp) +8000172c: 05010113 addi sp,sp,80 +80001730: 00008067 ret +80001734: 00000513 li a0,0 +80001738: ff1ff06f j 80001728 + +8000173c : +8000173c: fb010113 addi sp,sp,-80 +80001740: 04f12223 sw a5,68(sp) +80001744: 02112623 sw ra,44(sp) +80001748: 02d12e23 sw a3,60(sp) +8000174c: 04e12023 sw a4,64(sp) +80001750: 05012423 sw a6,72(sp) +80001754: 05112623 sw a7,76(sp) +80001758: 00000793 li a5,0 +8000175c: 04058863 beqz a1,800017ac +80001760: 04050663 beqz a0,800017ac +80001764: 00058313 mv t1,a1 +80001768: 00a12a23 sw a0,20(sp) +8000176c: 00060593 mv a1,a2 +80001770: 01010513 addi a0,sp,16 +80001774: 03c10613 addi a2,sp,60 +80001778: 00c12623 sw a2,12(sp) +8000177c: 00012823 sw zero,16(sp) +80001780: 00012c23 sw zero,24(sp) +80001784: 00612e23 sw t1,28(sp) +80001788: 00000317 auipc t1,0x0 +8000178c: ab4300e7 jalr -1356(t1) # 8000123c +80001790: 01812683 lw a3,24(sp) +80001794: 01c12703 lw a4,28(sp) +80001798: 01412783 lw a5,20(sp) +8000179c: 02e6d063 bge a3,a4,800017bc +800017a0: 00d787b3 add a5,a5,a3 +800017a4: 00078023 sb zero,0(a5) +800017a8: 01812783 lw a5,24(sp) +800017ac: 02c12083 lw ra,44(sp) +800017b0: 00078513 mv a0,a5 +800017b4: 05010113 addi sp,sp,80 +800017b8: 00008067 ret +800017bc: 00e787b3 add a5,a5,a4 +800017c0: fe078fa3 sb zero,-1(a5) +800017c4: fe5ff06f j 800017a8 + +800017c8 : +800017c8: 00050793 mv a5,a0 +800017cc: 0007c703 lbu a4,0(a5) +800017d0: 00071663 bnez a4,800017dc +800017d4: 40a78533 sub a0,a5,a0 +800017d8: 00008067 ret +800017dc: 00178793 addi a5,a5,1 +800017e0: fedff06f j 800017cc + +800017e4 : +800017e4: 00000793 li a5,0 +800017e8: 00058e63 beqz a1,80001804 +800017ec: 00050c63 beqz a0,80001804 +800017f0: 00b505b3 add a1,a0,a1 +800017f4: 00050793 mv a5,a0 +800017f8: 0007c703 lbu a4,0(a5) +800017fc: 00071863 bnez a4,8000180c +80001800: 40a787b3 sub a5,a5,a0 +80001804: 00078513 mv a0,a5 +80001808: 00008067 ret +8000180c: feb78ae3 beq a5,a1,80001800 +80001810: 00178793 addi a5,a5,1 +80001814: fe5ff06f j 800017f8 + +80001818 : +80001818: 00c58633 add a2,a1,a2 +8000181c: 00050793 mv a5,a0 +80001820: 00c59463 bne a1,a2,80001828 +80001824: 00008067 ret +80001828: 0005c703 lbu a4,0(a1) +8000182c: 00178793 addi a5,a5,1 +80001830: 00158593 addi a1,a1,1 +80001834: fee78fa3 sb a4,-1(a5) +80001838: fe9ff06f j 80001820 + +8000183c : +8000183c: 00d586b3 add a3,a1,a3 +80001840: 0ff67613 zext.b a2,a2 +80001844: 00d58e63 beq a1,a3,80001860 +80001848: 00158593 addi a1,a1,1 +8000184c: fff5c783 lbu a5,-1(a1) +80001850: 00150513 addi a0,a0,1 +80001854: fef50fa3 sb a5,-1(a0) +80001858: fec796e3 bne a5,a2,80001844 +8000185c: 00008067 ret +80001860: 00000513 li a0,0 +80001864: 00008067 ret + +80001868 <__mulsi3>: +80001868: 00000793 li a5,0 +8000186c: 00059663 bnez a1,80001878 <__mulsi3+0x10> +80001870: 00078513 mv a0,a5 +80001874: 00008067 ret +80001878: 0015f713 andi a4,a1,1 +8000187c: 00070463 beqz a4,80001884 <__mulsi3+0x1c> +80001880: 00a787b3 add a5,a5,a0 +80001884: 00151513 slli a0,a0,0x1 +80001888: 0015d593 srli a1,a1,0x1 +8000188c: fe1ff06f j 8000186c <__mulsi3+0x4> + +80001890 : +80001890: 01f59793 slli a5,a1,0x1f +80001894: 02000693 li a3,32 +80001898: 00000713 li a4,0 +8000189c: 00100313 li t1,1 +800018a0: 800008b7 lui a7,0x80000 +800018a4: 00171713 slli a4,a4,0x1 +800018a8: 00f56a63 bltu a0,a5,800018bc +800018ac: 00078863 beqz a5,800018bc +800018b0: 00b36663 bltu t1,a1,800018bc +800018b4: 40f50533 sub a0,a0,a5 +800018b8: 00176713 ori a4,a4,1 +800018bc: 01e59813 slli a6,a1,0x1e +800018c0: 0017d793 srli a5,a5,0x1 +800018c4: 01187833 and a6,a6,a7 +800018c8: fff68693 addi a3,a3,-1 +800018cc: 00f867b3 or a5,a6,a5 +800018d0: 0015d593 srli a1,a1,0x1 +800018d4: fc0698e3 bnez a3,800018a4 +800018d8: 00060463 beqz a2,800018e0 +800018dc: 00050713 mv a4,a0 +800018e0: 00070513 mv a0,a4 +800018e4: 00008067 ret + +800018e8 <__udivsi3>: +800018e8: 00000613 li a2,0 +800018ec: 00000317 auipc t1,0x0 +800018f0: fa430067 jr -92(t1) # 80001890 + +800018f4 <__divsi3>: +800018f4: ff010113 addi sp,sp,-16 +800018f8: 00112623 sw ra,12(sp) +800018fc: 00812423 sw s0,8(sp) +80001900: 00050793 mv a5,a0 +80001904: 00058713 mv a4,a1 +80001908: 02055e63 bgez a0,80001944 <__divsi3+0x50> +8000190c: 40a007b3 neg a5,a0 +80001910: 00100413 li s0,1 +80001914: 0205cc63 bltz a1,8000194c <__divsi3+0x58> +80001918: 00000613 li a2,0 +8000191c: 00078513 mv a0,a5 +80001920: 00000317 auipc t1,0x0 +80001924: f70300e7 jalr -144(t1) # 80001890 +80001928: 03c0006f j 80001964 <__divsi3+0x70> +8000192c: 00c12083 lw ra,12(sp) +80001930: 00812403 lw s0,8(sp) +80001934: 00000613 li a2,0 +80001938: 01010113 addi sp,sp,16 +8000193c: 00000317 auipc t1,0x0 +80001940: f5430067 jr -172(t1) # 80001890 +80001944: fe05d4e3 bgez a1,8000192c <__divsi3+0x38> +80001948: 00000413 li s0,0 +8000194c: 40e005b3 neg a1,a4 +80001950: 00000613 li a2,0 +80001954: 00078513 mv a0,a5 +80001958: 00000317 auipc t1,0x0 +8000195c: f38300e7 jalr -200(t1) # 80001890 +80001960: 00041463 bnez s0,80001968 <__divsi3+0x74> +80001964: 40a00533 neg a0,a0 +80001968: 00c12083 lw ra,12(sp) +8000196c: 00812403 lw s0,8(sp) +80001970: 01010113 addi sp,sp,16 +80001974: 00008067 ret + +80001978 <__umodsi3>: +80001978: 00100613 li a2,1 +8000197c: 00000317 auipc t1,0x0 +80001980: f1430067 jr -236(t1) # 80001890 + +80001984 <__modsi3>: +80001984: ff010113 addi sp,sp,-16 +80001988: 00112623 sw ra,12(sp) +8000198c: 00812423 sw s0,8(sp) +80001990: 00912223 sw s1,4(sp) +80001994: 00050413 mv s0,a0 +80001998: 00058493 mv s1,a1 +8000199c: 00000317 auipc t1,0x0 +800019a0: f58300e7 jalr -168(t1) # 800018f4 <__divsi3> +800019a4: 00050593 mv a1,a0 +800019a8: 00048513 mv a0,s1 +800019ac: 00000317 auipc t1,0x0 +800019b0: ebc300e7 jalr -324(t1) # 80001868 <__mulsi3> +800019b4: 00c12083 lw ra,12(sp) +800019b8: 40a40533 sub a0,s0,a0 +800019bc: 00412483 lw s1,4(sp) +800019c0: 00812403 lw s0,8(sp) +800019c4: 01010113 addi sp,sp,16 +800019c8: 00008067 ret +800019cc: 6e55 lui t3,0x15 +800019ce: 6168 flw fa0,68(a0) +800019d0: 646e flw fs0,216(sp) +800019d2: 656c flw fa1,76(a0) +800019d4: 2064 fld fs1,192(s0) +800019d6: 5249 li tp,-14 +800019d8: 2151 jal 80001e5c +800019da: 0000 unimp +800019dc: 6e55 lui t3,0x15 +800019de: 6168 flw fa0,68(a0) +800019e0: 646e flw fs0,216(sp) +800019e2: 656c flw fa1,76(a0) +800019e4: 2064 fld fs1,192(s0) +800019e6: 7865 lui a6,0xffff9 +800019e8: 74706563 bltu zero,t2,80002132 +800019ec: 6f69 lui t5,0x1a +800019ee: 3a6e fld fs4,248(sp) +800019f0: 5020 lw s0,96(s0) +800019f2: 78302043 fmadd.s ft0,ft0,ft3,fa5,rdn +800019f6: 3025 jal 8000121e +800019f8: 7838 flw fa4,112(s0) +800019fa: 4320 lw s0,64(a4) +800019fc: 7561 lui a0,0xffff8 +800019fe: 25206573 csrrsi a0,vsireg2,0 +80001a02: 2164 fld fs1,192(a0) +80001a04: 000a c.slli zero,0x2 +80001a06: 0000 unimp +80001a08: 6d6f682f .insn 4, 0x6d6f682f +80001a0c: 2f65 jal 800021c4 +80001a0e: 6f72 flw ft10,28(sp) +80001a10: 2f62 fld ft10,24(sp) +80001a12: 6572 flw fa0,28(sp) +80001a14: 6f70 flw fa2,92(a4) +80001a16: 7369722f .insn 4, 0x7369722f +80001a1a: 722d7663 bgeu s10,sp,80002146 +80001a1e: 616c702f .insn 4, 0x616c702f +80001a22: 6674 flw fa3,76(a2) +80001a24: 2f6d726f jal tp,800d8d1a <_end+0xd5eca> +80001a28: 616d addi sp,sp,240 +80001a2a: 6e696863 bltu s2,t1,8000211a +80001a2e: 2d65 jal 800020e6 +80001a30: 2f6d6973 csrrsi s2,0x2f6,26 +80001a34: 7865 lui a6,0xffff9 +80001a36: 74706563 bltu zero,t2,80002180 +80001a3a: 6f69 lui t5,0x1a +80001a3c: 2e6e fld ft8,216(sp) +80001a3e: 22210063 beq sp,sp,80001c5e <__modsi3+0x2da> +80001a42: 6e55 lui t3,0x15 +80001a44: 6168 flw fa0,68(a0) +80001a46: 646e flw fs0,216(sp) +80001a48: 656c flw fa1,76(a0) +80001a4a: 2064 fld fs1,192(s0) +80001a4c: 7865 lui a6,0xffff9 +80001a4e: 74706563 bltu zero,t2,80002198 +80001a52: 6f69 lui t5,0x1a +80001a54: 226e fld ft4,216(sp) +80001a56: 0000 unimp +80001a58: 5341 li t1,-16 +80001a5a: 54524553 .insn 4, 0x54524553 +80001a5e: 0000 unimp +80001a60: 7845 lui a6,0xffff1 +80001a62: 74706563 bltu zero,t2,800021ac +80001a66: 6f69 lui t5,0x1a +80001a68: 3a6e fld fs4,248(sp) +80001a6a: 5020 lw s0,96(s0) +80001a6c: 30253d43 fmadd.s fs10,fa0,ft2,ft6,rup +80001a70: 7838 flw fa4,112(s0) +80001a72: 4320 lw s0,64(a4) +80001a74: 7561 lui a0,0xffff8 +80001a76: 253d6573 csrrsi a0,vsireg3,26 +80001a7a: 2078 fld fa4,192(s0) +80001a7c: 74617453 .insn 4, 0x74617453 +80001a80: 7375 lui t1,0xffffd +80001a82: 253d jal 800020b0 +80001a84: 3830 fld fa2,112(s0) +80001a86: 0a78 addi a4,sp,284 +80001a88: 0000 unimp +80001a8a: 0000 unimp +80001a8c: 4552 lw a0,20(sp) +80001a8e: 2e252047 .insn 4, 0x2e252047 +80001a92: 6432 flw fs0,12(sp) +80001a94: 203a fld ft0,392(sp) +80001a96: 3025 jal 800012be +80001a98: 7838 flw fa4,112(s0) +80001a9a: 000a c.slli zero,0x2 +80001a9c: 63617473 csrrci s0,0x636,2 +80001aa0: 0000006b .insn 4, 0x006b +80001aa4: 63617473 csrrci s0,0x636,2 +80001aa8: 69735f6b .insn 4, 0x69735f6b +80001aac: 657a flw fa0,156(sp) +80001aae: 2120 fld fs0,64(a0) +80001ab0: 203d jal 80001ade <__modsi3+0x15a> +80001ab2: 0030 addi a2,sp,8 +80001ab4: 7325 lui t1,0xfffe9 +80001ab6: 203a fld ft0,392(sp) +80001ab8: 7325 lui t1,0xfffe9 +80001aba: 2820 fld fs0,80(s0) +80001abc: 7325 lui t1,0xfffe9 +80001abe: 253a fld fa0,392(sp) +80001ac0: 2964 fld fs1,208(a0) +80001ac2: 000a c.slli zero,0x2 +80001ac4: 540a lw s0,160(sp) +80001ac6: 7365 lui t1,0xffff9 +80001ac8: 3a74 fld fa3,240(a2) +80001aca: 0000 unimp +80001acc: 2e31 jal 80001de8 <__modsi3+0x464> +80001ace: 4920 lw s0,80(a0) +80001ad0: 696e flw fs2,216(sp) +80001ad2: 6974 flw fa3,84(a0) +80001ad4: 6c61 lui s8,0x18 +80001ad6: 7369 lui t1,0xffffa +80001ad8: 6465 lui s0,0x19 +80001ada: 6420 flw fs0,72(s0) +80001adc: 7461 lui s0,0xffff8 +80001ade: 0061 c.nop 24 +80001ae0: 6574 flw fa3,76(a0) +80001ae2: 632e7473 csrrci s0,0x632,28 +80001ae6: 0000 unimp +80001ae8: 6176 flw ft2,92(sp) +80001aea: 2072 fld ft0,280(sp) +80001aec: 3d3d jal 8000192a <__divsi3+0x36> +80001aee: 3020 fld fs0,96(s0) +80001af0: 3178 fld fa4,224(a0) +80001af2: 3332 fld ft6,296(sp) +80001af4: 0034 addi a3,sp,8 +80001af6: 0000 unimp +80001af8: 7675 lui a2,0xffffd +80001afa: 7261 lui tp,0xffff8 +80001afc: 3d20 fld fs0,120(a0) +80001afe: 203d jal 80001b2c <__modsi3+0x1a8> +80001b00: 7830 flw fa2,112(s0) +80001b02: 0030 addi a2,sp,8 +80001b04: 2e32 fld ft8,264(sp) +80001b06: 4d20 lw s0,88(a0) +80001b08: 6c75 lui s8,0x1d +80001b0a: 6974 flw fa3,84(a0) +80001b0c: 6c70 flw fa2,92(s0) +80001b0e: 0079 c.nop 30 +80001b10: 6176 flw ft2,92(sp) +80001b12: 2072 fld ft0,280(sp) +80001b14: 3d3d jal 80001952 <__divsi3+0x5e> +80001b16: 3120 fld fs0,96(a0) +80001b18: 30383933 .insn 4, 0x30383933 +80001b1c: 0000 unimp +80001b1e: 0000 unimp +80001b20: 6176 flw ft2,92(sp) +80001b22: 2072 fld ft0,280(sp) +80001b24: 3d3d jal 80001962 <__divsi3+0x6e> +80001b26: 2d20 fld fs0,88(a0) +80001b28: 00000033 add zero,zero,zero +80001b2c: 6176 flw ft2,92(sp) +80001b2e: 2072 fld ft0,280(sp) +80001b30: 3d3d jal 8000196e <__divsi3+0x7a> +80001b32: 2d20 fld fs0,88(a0) +80001b34: 3536 fld fa0,360(sp) +80001b36: 0000 unimp +80001b38: 6176 flw ft2,92(sp) +80001b3a: 2072 fld ft0,280(sp) +80001b3c: 3d3d jal 8000197a <__umodsi3+0x2> +80001b3e: 2820 fld fs0,80(s0) +80001b40: 352d jal 8000196a <__divsi3+0x76> +80001b42: 2d2a fld fs10,136(sp) +80001b44: 3331 jal 80001850 +80001b46: 0029 c.nop 10 +80001b48: 6176 flw ft2,92(sp) +80001b4a: 2072 fld ft0,280(sp) +80001b4c: 3d3d jal 8000198a <__modsi3+0x6> +80001b4e: 2820 fld fs0,80(s0) +80001b50: 312d jal 8000177a +80001b52: 3332 fld ft6,296(sp) +80001b54: 3231 jal 80001460 +80001b56: 35313433 .insn 4, 0x35313433 +80001b5a: 392a fld fs2,168(sp) +80001b5c: 3636 fld fa2,360(sp) +80001b5e: 3534 fld fa3,104(a0) +80001b60: 3336 fld ft6,360(sp) +80001b62: 0029 c.nop 10 +80001b64: 44202e33 .insn 4, 0x44202e33 +80001b68: 7669 lui a2,0xffffa +80001b6a: 6469 lui s0,0x1a +80001b6c: 0065 c.nop 25 +80001b6e: 0000 unimp +80001b70: 6176 flw ft2,92(sp) +80001b72: 2072 fld ft0,280(sp) +80001b74: 3d3d jal 800019b2 <__modsi3+0x2e> +80001b76: 3220 fld fs0,96(a2) +80001b78: 00363937 lui s2,0x363 +80001b7c: 6176 flw ft2,92(sp) +80001b7e: 2072 fld ft0,280(sp) +80001b80: 3d3d jal 800019be <__modsi3+0x3a> +80001b82: 3920 fld fs0,112(a0) +80001b84: 0036 c.slli zero,0xd +80001b86: 0000 unimp +80001b88: 6176 flw ft2,92(sp) +80001b8a: 2072 fld ft0,280(sp) +80001b8c: 3d3d jal 800019ca <__modsi3+0x46> +80001b8e: 2d20 fld fs0,88(a0) +80001b90: 3736 fld fa4,360(sp) +80001b92: 0000 unimp +80001b94: 2e34 fld fa3,88(a2) +80001b96: 5320 lw s0,96(a4) +80001b98: 6968 flw fa0,84(a0) +80001b9a: 7466 flw fs0,120(sp) +80001b9c: 6c20 flw fs0,88(s0) +80001b9e: 6665 lui a2,0x19 +80001ba0: 0074 addi a3,sp,12 +80001ba2: 0000 unimp +80001ba4: 6176 flw ft2,92(sp) +80001ba6: 2072 fld ft0,280(sp) +80001ba8: 3d3d jal 800019e6 <__modsi3+0x62> +80001baa: 3020 fld fs0,96(s0) +80001bac: 3878 fld fa4,240(s0) +80001bae: 3030 fld fa2,96(s0) +80001bb0: 3030 fld fa2,96(s0) +80001bb2: 3030 fld fa2,96(s0) +80001bb4: 0030 addi a2,sp,8 +80001bb6: 0000 unimp +80001bb8: 2e35 jal 80001ef4 +80001bba: 5320 lw s0,96(a4) +80001bbc: 6968 flw fa0,84(a0) +80001bbe: 7466 flw fs0,120(sp) +80001bc0: 7220 flw fs0,96(a2) +80001bc2: 6769 lui a4,0x1a +80001bc4: 7468 flw fa0,108(s0) +80001bc6: 0000 unimp +80001bc8: 7825 lui a6,0xfffe9 +80001bca: 000a c.slli zero,0x2 +80001bcc: 7675 lui a2,0xffffd +80001bce: 7261 lui tp,0xffff8 +80001bd0: 3d20 fld fs0,120(a0) +80001bd2: 203d jal 80001c00 <__modsi3+0x27c> +80001bd4: 7830 flw fa2,112(s0) +80001bd6: 3034 fld fa3,96(s0) +80001bd8: 3030 fld fa2,96(s0) +80001bda: 3030 fld fa2,96(s0) +80001bdc: 3030 fld fa2,96(s0) +80001bde: 0000 unimp +80001be0: 7675 lui a2,0xffffd +80001be2: 7261 lui tp,0xffff8 +80001be4: 3d20 fld fs0,120(a0) +80001be6: 203d jal 80001c14 <__modsi3+0x290> +80001be8: 7830 flw fa2,112(s0) +80001bea: 3030 fld fa2,96(s0) +80001bec: 3030 fld fa2,96(s0) +80001bee: 3030 fld fa2,96(s0) +80001bf0: 3130 fld fa2,96(a0) +80001bf2: 0000 unimp +80001bf4: 2e36 fld ft8,328(sp) +80001bf6: 5320 lw s0,96(a4) +80001bf8: 6968 flw fa0,84(a0) +80001bfa: 7466 flw fs0,120(sp) +80001bfc: 7220 flw fs0,96(a2) +80001bfe: 6769 lui a4,0x1a +80001c00: 7468 flw fa0,108(s0) +80001c02: 6120 flw fs0,64(a0) +80001c04: 6972 flw fs2,28(sp) +80001c06: 6874 flw fa3,84(s0) +80001c08: 656d lui a0,0x1b +80001c0a: 6974 flw fa3,84(a0) +80001c0c: 00000063 beqz zero,80001c0c <__modsi3+0x288> +80001c10: 6176 flw ft2,92(sp) +80001c12: 2072 fld ft0,280(sp) +80001c14: 3d3d jal 80001a52 <__modsi3+0xce> +80001c16: 3020 fld fs0,96(s0) +80001c18: 4378 lw a4,68(a4) +80001c1a: 3030 fld fa2,96(s0) +80001c1c: 3030 fld fa2,96(s0) +80001c1e: 3030 fld fa2,96(s0) +80001c20: 0030 addi a2,sp,8 +80001c22: 0000 unimp +80001c24: 53202e37 lui t3,0x53202 +80001c28: 6769 lui a4,0x1a +80001c2a: 656e flw fa0,216(sp) +80001c2c: 2064 fld fs1,192(s0) +80001c2e: 706d6f63 bltu s10,t1,8000234c +80001c32: 7261 lui tp,0xffff8 +80001c34: 7369 lui t1,0xffffa +80001c36: 6f69 lui t5,0x1a +80001c38: 006e c.slli zero,0x1b +80001c3a: 0000 unimp +80001c3c: 6176 flw ft2,92(sp) +80001c3e: 2072 fld ft0,280(sp) +80001c40: 203c fld fa5,64(s0) +80001c42: 0031 c.nop 12 +80001c44: 6176 flw ft2,92(sp) +80001c46: 2072 fld ft0,280(sp) +80001c48: 203c fld fa5,64(s0) +80001c4a: 0078 addi a4,sp,12 +80001c4c: 2821 jal 80001c64 <__modsi3+0x2e0> +80001c4e: 6176 flw ft2,92(sp) +80001c50: 2072 fld ft0,280(sp) +80001c52: 203e fld ft0,456(sp) +80001c54: 2978 fld fa4,208(a0) +80001c56: 0000 unimp +80001c58: 6176 flw ft2,92(sp) +80001c5a: 2072 fld ft0,280(sp) +80001c5c: 203e fld ft0,456(sp) +80001c5e: 0078 addi a4,sp,12 +80001c60: 2078 fld fa4,192(s0) +80001c62: 3d3c fld fa5,120(a0) +80001c64: 7620 flw fs0,104(a2) +80001c66: 7261 lui tp,0xffff8 +80001c68: 0000 unimp +80001c6a: 0000 unimp +80001c6c: 2e38 fld fa4,88(a2) +80001c6e: 5720 lw s0,104(a4) +80001c70: 2064726f jal tp,80048e76 <_end+0x46026> +80001c74: 6361 lui t1,0x18 +80001c76: 73736563 bltu t1,s7,800023a0 +80001c7a: 0000 unimp +80001c7c: 7675 lui a2,0xffffd +80001c7e: 7261 lui tp,0xffff8 +80001c80: 3d20 fld fs0,120(a0) +80001c82: 203d jal 80001cb0 <__modsi3+0x32c> +80001c84: 7830 flw fa2,112(s0) +80001c86: 3231 jal 80001592 +80001c88: 36353433 .insn 4, 0x36353433 +80001c8c: 00003837 lui a6,0x3 +80001c90: 3d207773 csrrci a4,pmpaddr34,0 +80001c94: 203d jal 80001cc2 <__modsi3+0x33e> +80001c96: 7830 flw fa2,112(s0) +80001c98: 3635 jal 800017c4 +80001c9a: 00003837 lui a6,0x3 +80001c9e: 0000 unimp +80001ca0: 702a flw ft0,168(sp) +80001ca2: 2b2b7773 csrrci a4,0x2b2,22 +80001ca6: 3d20 fld fs0,120(a0) +80001ca8: 203d jal 80001cd6 <__modsi3+0x352> +80001caa: 7830 flw fa2,112(s0) +80001cac: 3635 jal 800017d8 +80001cae: 00003837 lui a6,0x3 +80001cb2: 0000 unimp +80001cb4: 702a flw ft0,168(sp) +80001cb6: 2b2b7773 csrrci a4,0x2b2,22 +80001cba: 3d20 fld fs0,120(a0) +80001cbc: 203d jal 80001cea <__modsi3+0x366> +80001cbe: 7830 flw fa2,112(s0) +80001cc0: 3231 jal 800015cc +80001cc2: 00003433 snez s0,zero +80001cc6: 0000 unimp +80001cc8: 702a flw ft0,168(sp) +80001cca: 2b2b7773 csrrci a4,0x2b2,22 +80001cce: 3d20 fld fs0,120(a0) +80001cd0: 203d jal 80001cfe <__modsi3+0x37a> +80001cd2: 7830 flw fa2,112(s0) +80001cd4: 65666163 bltu a2,s6,80002316 +80001cd8: 0000 unimp +80001cda: 0000 unimp +80001cdc: 702a flw ft0,168(sp) +80001cde: 2b2b7773 csrrci a4,0x2b2,22 +80001ce2: 3d20 fld fs0,120(a0) +80001ce4: 203d jal 80001d12 <__modsi3+0x38e> +80001ce6: 7830 flw fa2,112(s0) +80001ce8: 6162 flw ft2,24(sp) +80001cea: 6562 flw fa0,24(sp) +80001cec: 0000 unimp +80001cee: 0000 unimp +80001cf0: 2e39 jal 8000200e +80001cf2: 4220 lw s0,64(a2) +80001cf4: 7479 lui s0,0xffffe +80001cf6: 2065 jal 80001d9e <__modsi3+0x41a> +80001cf8: 6361 lui t1,0x18 +80001cfa: 73736563 bltu t1,s7,80002424 +80001cfe: 0000 unimp +80001d00: 3d206273 csrrsi tp,pmpaddr34,0 +80001d04: 203d jal 80001d32 <__modsi3+0x3ae> +80001d06: 7830 flw fa2,112(s0) +80001d08: 00003837 lui a6,0x3 +80001d0c: 702a flw ft0,168(sp) +80001d0e: 2b2b6273 csrrsi tp,0x2b2,22 +80001d12: 3d20 fld fs0,120(a0) +80001d14: 203d jal 80001d42 <__modsi3+0x3be> +80001d16: 7830 flw fa2,112(s0) +80001d18: 00003837 lui a6,0x3 +80001d1c: 702a flw ft0,168(sp) +80001d1e: 2b2b6273 csrrsi tp,0x2b2,22 +80001d22: 3d20 fld fs0,120(a0) +80001d24: 203d jal 80001d52 <__modsi3+0x3ce> +80001d26: 7830 flw fa2,112(s0) +80001d28: 3635 jal 80001854 +80001d2a: 0000 unimp +80001d2c: 702a flw ft0,168(sp) +80001d2e: 2b2b6273 csrrsi tp,0x2b2,22 +80001d32: 3d20 fld fs0,120(a0) +80001d34: 203d jal 80001d62 <__modsi3+0x3de> +80001d36: 7830 flw fa2,112(s0) +80001d38: 00003433 snez s0,zero +80001d3c: 702a flw ft0,168(sp) +80001d3e: 2b2b6273 csrrsi tp,0x2b2,22 +80001d42: 3d20 fld fs0,120(a0) +80001d44: 203d jal 80001d72 <__modsi3+0x3ee> +80001d46: 7830 flw fa2,112(s0) +80001d48: 3231 jal 80001654 +80001d4a: 0000 unimp +80001d4c: 7675 lui a2,0xffffd +80001d4e: 7261 lui tp,0xffff8 +80001d50: 3d20 fld fs0,120(a0) +80001d52: 203d jal 80001d80 <__modsi3+0x3fc> +80001d54: 7830 flw fa2,112(s0) +80001d56: 3231 jal 80001662 +80001d58: 36353433 .insn 4, 0x36353433 +80001d5c: 6261 lui tp,0x18 +80001d5e: 0000 unimp +80001d60: 7675 lui a2,0xffffd +80001d62: 7261 lui tp,0xffff8 +80001d64: 3d20 fld fs0,120(a0) +80001d66: 203d jal 80001d94 <__modsi3+0x410> +80001d68: 7830 flw fa2,112(s0) +80001d6a: 3231 jal 80001676 +80001d6c: 64633433 .insn 4, 0x64633433 +80001d70: 6261 lui tp,0x18 +80001d72: 0000 unimp +80001d74: 7675 lui a2,0xffffd +80001d76: 7261 lui tp,0xffff8 +80001d78: 3d20 fld fs0,120(a0) +80001d7a: 203d jal 80001da8 <__modsi3+0x424> +80001d7c: 7830 flw fa2,112(s0) +80001d7e: 3231 jal 8000168a +80001d80: 6665 lui a2,0x19 +80001d82: 62616463 bltu sp,t1,800023aa +80001d86: 0000 unimp +80001d88: 7675 lui a2,0xffffd +80001d8a: 7261 lui tp,0xffff8 +80001d8c: 3d20 fld fs0,120(a0) +80001d8e: 203d jal 80001dbc <__modsi3+0x438> +80001d90: 7830 flw fa2,112(s0) +80001d92: 3130 fld fa2,96(a0) +80001d94: 6665 lui a2,0x19 +80001d96: 62616463 bltu sp,t1,800023be +80001d9a: 0000 unimp +80001d9c: 3031 jal 800015a8 +80001d9e: 202e fld ft0,200(sp) +80001da0: 706d6f43 fmadd.s ft10,fs10,ft6,fa4,unknown +80001da4: 7261 lui tp,0xffff8 +80001da6: 7369 lui t1,0xffffa +80001da8: 6f69 lui t5,0x1a +80001daa: 006e c.slli zero,0x1b +80001dac: 202d jal 80001dd6 <__modsi3+0x452> +80001dae: 6e49 lui t3,0x12 +80001db0: 72726f63 bltu tp,t2,800024ee +80001db4: 6365 lui t1,0x19 +80001db6: 2074 fld fa3,192(s0) +80001db8: 706d6f63 bltu s10,t1,800024d6 +80001dbc: 7261 lui tp,0xffff8 +80001dbe: 7369 lui t1,0xffffa +80001dc0: 6f69 lui t5,0x1a +80001dc2: 006e c.slli zero,0x1b +80001dc4: 3130 fld fa2,96(a0) +80001dc6: 3332 fld ft6,296(sp) +80001dc8: 3534 fld fa3,104(a0) +80001dca: 3736 fld fa4,360(sp) +80001dcc: 3938 fld fa4,112(a0) +80001dce: 4241 li tp,16 +80001dd0: 46454443 .insn 4, 0x46454443 +80001dd4: 0000 unimp +80001dd6: 0000 unimp +80001dd8: 3130 fld fa2,96(a0) +80001dda: 3332 fld ft6,296(sp) +80001ddc: 3534 fld fa3,104(a0) +80001dde: 3736 fld fa4,360(sp) +80001de0: 3938 fld fa4,112(a0) +80001de2: 6261 lui tp,0x18 +80001de4: 66656463 bltu a0,t1,8000244c +80001de8: 0000 unimp + ... diff --git a/riscv-app-gen/quicksort/quicksort.c b/riscv-app-gen/quicksort/quicksort.c new file mode 100644 index 0000000..97b6a2d --- /dev/null +++ b/riscv-app-gen/quicksort/quicksort.c @@ -0,0 +1,60 @@ +#include + +// Fonte: https://www.geeksforgeeks.org/quick-sort-algorithm/ + +void swap(int* a, int* b); + +// Partition function +int partition(int arr[], int low, int high) { + + // Choose the pivot + int pivot = arr[high]; + + // Index of smaller element and indicates + // the right position of pivot found so far + int i = low - 1; + + // Traverse arr[low..high] and move all smaller + // elements to the left side. Elements from low to + // i are smaller after every iteration + for (int j = low; j <= high - 1; j++) { + if (arr[j] < pivot) { + i++; + swap(&arr[i], &arr[j]); + } + } + + // Move pivot after smaller elements and + // return its position + swap(&arr[i + 1], &arr[high]); + return i + 1; +} + +// The QuickSort function implementation +void quickSort(int arr[], int low, int high) { + if (low < high) { + + // pi is the partition return index of pivot + int pi = partition(arr, low, high); + + // Recursion calls for smaller elements + // and greater or equals elements + quickSort(arr, low, pi - 1); + quickSort(arr, pi + 1, high); + } +} + +void swap(int* a, int* b) { + int t = *a; + *a = *b; + *b = t; +} + +int main() { + int arr[] = {10, 7, 8, 9, 1, 5}; + int n = sizeof(arr) / sizeof(arr[0]); + + quickSort(arr, 0, n - 1); + + return 0; +} \ No newline at end of file diff --git a/riscv-app-gen/quicksort/quicksort.elf b/riscv-app-gen/quicksort/quicksort.elf new file mode 100755 index 0000000000000000000000000000000000000000..7e6db35edfdcf9b12e8499f0594921414bc753f1 GIT binary patch literal 5692 zcmeHLU1%It6h3$F%uY5x*z~40Rj}LMxVzbGrunnlQZQ?^QOHAEMfy-kx0_fOyUBJl zsZ|QjGBoK!US#ntmW-45o?Hcx6%pvRy+Co*mmBbZ|*6;8AO~#j~+KPLhTG)de zO{VtgGSRQg)DoA8Pq>(E4dOTC{v{G^z#qT4OGMiOv9Wd8g<2|h`cAu;4aOGl$pm6C zbi#3;%=;oG8qmIYTnv=*fo~+<4 zmYJA;oN6!Jt&92HR2v@s(@8S;V2@t@ou@0Bn16z5$1)FE#YrLzX^KPa)-OC#9W!&jqj-Y-c@BFG0U)CLbGw)#<$GbY2 zEXP|%RbQyZuj}L_(F^fa^uwm>`^+G_I=6Cwe`JtzV}$sPIrQTSum*Fkk1*u_C3M^; zdK`QZ$wYfZcIA|2GR2rof8}zcI9k6y_ATxZ5x^mjt23L4$iQmCieag_m6}nF96fqC zo;uezbnwu@@i+Pob;tXM%mK5HvfYT53)A_F#P-6}cIf4cg9C+uQvXp!28(VFjZF`E5+N&9! zw~tT)##QXqIBzGid%S=>-`GC`t?*~ueS{7}V;E<9iqrEjfVJy5Smo1&nL_@p>8Y}1 z=Bew_ztAxKcCJLFT-hpEg{es@<_eQEHZeKwWxtASB6IqkqLn)fZIwO!rf*pjmn<^X zKZ2+-QzElGHJ-C_Wag)e#feFT-S;qamQ^mCov|jS)s6p~JPDZMQOzA8wi-TygKhCy z-v^J6QyeYqBs#N=LK`&f0}Y%iQ3tLLT<0Tj&o*#=n{;57x+j2BXQ?%eg-$3zxuRyS z{;X9w6h?{Cfosz#;C_Tp^|tD3bw7NXYX>{)IW)s7@cZJ|YlkC2SNL|zX8qx BLIwZ; literal 0 HcmV?d00001 diff --git a/riscv-app-gen/quicksort/quicksort.s b/riscv-app-gen/quicksort/quicksort.s new file mode 100644 index 0000000..3a42ac6 --- /dev/null +++ b/riscv-app-gen/quicksort/quicksort.s @@ -0,0 +1,206 @@ + +quicksort.elf: file format elf32-littleriscv + + +Disassembly of section .text: + +80000000 : +80000000: 00261893 slli a7,a2,0x2 +80000004: 011508b3 add a7,a0,a7 +80000008: 0008ae03 lw t3,0(a7) +8000000c: 00050313 mv t1,a0 +80000010: fff58813 addi a6,a1,-1 +80000014: 04c5dc63 bge a1,a2,8000006c +80000018: 00259593 slli a1,a1,0x2 +8000001c: 00b507b3 add a5,a0,a1 +80000020: 0007a683 lw a3,0(a5) +80000024: 01c6de63 bge a3,t3,80000040 +80000028: 00180813 addi a6,a6,1 +8000002c: 00281713 slli a4,a6,0x2 +80000030: 00e30733 add a4,t1,a4 +80000034: 00072603 lw a2,0(a4) +80000038: 00d72023 sw a3,0(a4) +8000003c: 00c7a023 sw a2,0(a5) +80000040: 00478793 addi a5,a5,4 +80000044: fcf89ee3 bne a7,a5,80000020 +80000048: 00180813 addi a6,a6,1 +8000004c: 00080513 mv a0,a6 +80000050: 00281813 slli a6,a6,0x2 +80000054: 0008ae03 lw t3,0(a7) +80000058: 01030333 add t1,t1,a6 +8000005c: 00032783 lw a5,0(t1) +80000060: 01c32023 sw t3,0(t1) +80000064: 00f8a023 sw a5,0(a7) +80000068: 00008067 ret +8000006c: 00058813 mv a6,a1 +80000070: 00281813 slli a6,a6,0x2 +80000074: 01030333 add t1,t1,a6 +80000078: 00032783 lw a5,0(t1) +8000007c: 01c32023 sw t3,0(t1) +80000080: 00058513 mv a0,a1 +80000084: 00f8a023 sw a5,0(a7) +80000088: 00008067 ret + +8000008c : +8000008c: 1ec5dc63 bge a1,a2,80000284 +80000090: fa010113 addi sp,sp,-96 +80000094: 04912a23 sw s1,84(sp) +80000098: 05612023 sw s6,64(sp) +8000009c: 03812c23 sw s8,56(sp) +800000a0: 04112e23 sw ra,92(sp) +800000a4: 03912a23 sw s9,52(sp) +800000a8: 00058c13 mv s8,a1 +800000ac: 00060b13 mv s6,a2 +800000b0: 00050493 mv s1,a0 +800000b4: 000b0613 mv a2,s6 +800000b8: 000c0593 mv a1,s8 +800000bc: 00048513 mv a0,s1 +800000c0: f41ff0ef jal 80000000 +800000c4: 00a12023 sw a0,0(sp) +800000c8: fff50c93 addi s9,a0,-1 +800000cc: 199c5863 bge s8,s9,8000025c +800000d0: 04812c23 sw s0,88(sp) +800000d4: 05212823 sw s2,80(sp) +800000d8: 05312623 sw s3,76(sp) +800000dc: 03a12823 sw s10,48(sp) +800000e0: 03b12623 sw s11,44(sp) +800000e4: 000c8613 mv a2,s9 +800000e8: 000c0593 mv a1,s8 +800000ec: 00048513 mv a0,s1 +800000f0: f11ff0ef jal 80000000 +800000f4: 00a12223 sw a0,4(sp) +800000f8: fff50d13 addi s10,a0,-1 +800000fc: 15ac5063 bge s8,s10,8000023c +80000100: 000d0613 mv a2,s10 +80000104: 000c0593 mv a1,s8 +80000108: 00048513 mv a0,s1 +8000010c: ef5ff0ef jal 80000000 +80000110: 00a12423 sw a0,8(sp) +80000114: fff50d93 addi s11,a0,-1 +80000118: 11bc5c63 bge s8,s11,80000230 +8000011c: 000d8613 mv a2,s11 +80000120: 000c0593 mv a1,s8 +80000124: 00048513 mv a0,s1 +80000128: ed9ff0ef jal 80000000 +8000012c: 00a12623 sw a0,12(sp) +80000130: fff50993 addi s3,a0,-1 +80000134: 0f3c5863 bge s8,s3,80000224 +80000138: 00098613 mv a2,s3 +8000013c: 000c0593 mv a1,s8 +80000140: 00048513 mv a0,s1 +80000144: ebdff0ef jal 80000000 +80000148: fff50913 addi s2,a0,-1 +8000014c: 00050413 mv s0,a0 +80000150: 0d2c5663 bge s8,s2,8000021c +80000154: 05512223 sw s5,68(sp) +80000158: 03712e23 sw s7,60(sp) +8000015c: 00090613 mv a2,s2 +80000160: 000c0593 mv a1,s8 +80000164: 00048513 mv a0,s1 +80000168: e99ff0ef jal 80000000 +8000016c: fff50b93 addi s7,a0,-1 +80000170: 00050a93 mv s5,a0 +80000174: 097c5c63 bge s8,s7,8000020c +80000178: 05412423 sw s4,72(sp) +8000017c: 000b8613 mv a2,s7 +80000180: 000c0593 mv a1,s8 +80000184: 00048513 mv a0,s1 +80000188: e79ff0ef jal 80000000 +8000018c: 00a12823 sw a0,16(sp) +80000190: fff50a13 addi s4,a0,-1 +80000194: 074c5463 bge s8,s4,800001fc +80000198: 000a0613 mv a2,s4 +8000019c: 000c0593 mv a1,s8 +800001a0: 00048513 mv a0,s1 +800001a4: e5dff0ef jal 80000000 +800001a8: fff50713 addi a4,a0,-1 +800001ac: 00050793 mv a5,a0 +800001b0: 04ec5263 bge s8,a4,800001f4 +800001b4: 00070613 mv a2,a4 +800001b8: 000c0593 mv a1,s8 +800001bc: 00048513 mv a0,s1 +800001c0: 00f12e23 sw a5,28(sp) +800001c4: 00e12c23 sw a4,24(sp) +800001c8: e39ff0ef jal 80000000 +800001cc: 000c0593 mv a1,s8 +800001d0: fff50613 addi a2,a0,-1 +800001d4: 00a12a23 sw a0,20(sp) +800001d8: 00048513 mv a0,s1 +800001dc: eb1ff0ef jal 8000008c +800001e0: 01412683 lw a3,20(sp) +800001e4: 01812703 lw a4,24(sp) +800001e8: 01c12783 lw a5,28(sp) +800001ec: 00168c13 addi s8,a3,1 +800001f0: fcec42e3 blt s8,a4,800001b4 +800001f4: 00178c13 addi s8,a5,1 +800001f8: fb4c40e3 blt s8,s4,80000198 +800001fc: 01012783 lw a5,16(sp) +80000200: 00178c13 addi s8,a5,1 +80000204: f77c4ce3 blt s8,s7,8000017c +80000208: 04812a03 lw s4,72(sp) +8000020c: 001a8c13 addi s8,s5,1 +80000210: f52c46e3 blt s8,s2,8000015c +80000214: 04412a83 lw s5,68(sp) +80000218: 03c12b83 lw s7,60(sp) +8000021c: 00140c13 addi s8,s0,1 +80000220: f13c4ce3 blt s8,s3,80000138 +80000224: 00c12783 lw a5,12(sp) +80000228: 00178c13 addi s8,a5,1 +8000022c: efbc48e3 blt s8,s11,8000011c +80000230: 00812783 lw a5,8(sp) +80000234: 00178c13 addi s8,a5,1 +80000238: edac44e3 blt s8,s10,80000100 +8000023c: 00412783 lw a5,4(sp) +80000240: 00178c13 addi s8,a5,1 +80000244: eb9c40e3 blt s8,s9,800000e4 +80000248: 05812403 lw s0,88(sp) +8000024c: 05012903 lw s2,80(sp) +80000250: 04c12983 lw s3,76(sp) +80000254: 03012d03 lw s10,48(sp) +80000258: 02c12d83 lw s11,44(sp) +8000025c: 00012783 lw a5,0(sp) +80000260: 00178c13 addi s8,a5,1 +80000264: e56c48e3 blt s8,s6,800000b4 +80000268: 05c12083 lw ra,92(sp) +8000026c: 05412483 lw s1,84(sp) +80000270: 04012b03 lw s6,64(sp) +80000274: 03812c03 lw s8,56(sp) +80000278: 03412c83 lw s9,52(sp) +8000027c: 06010113 addi sp,sp,96 +80000280: 00008067 ret +80000284: 00008067 ret + +80000288 : +80000288: 0005a703 lw a4,0(a1) +8000028c: 00052783 lw a5,0(a0) +80000290: 00e52023 sw a4,0(a0) +80000294: 00f5a023 sw a5,0(a1) +80000298: 00008067 ret + +Disassembly of section .text.startup: + +8000029c
: +8000029c: 800007b7 lui a5,0x80000 +800002a0: 2fc78793 addi a5,a5,764 # 800002fc +800002a4: 0007a303 lw t1,0(a5) +800002a8: 0047a883 lw a7,4(a5) +800002ac: 0087a803 lw a6,8(a5) +800002b0: 00c7a683 lw a3,12(a5) +800002b4: 0107a703 lw a4,16(a5) +800002b8: 0147a783 lw a5,20(a5) +800002bc: fd010113 addi sp,sp,-48 +800002c0: 00810513 addi a0,sp,8 +800002c4: 00500613 li a2,5 +800002c8: 00000593 li a1,0 +800002cc: 02112623 sw ra,44(sp) +800002d0: 00612423 sw t1,8(sp) +800002d4: 01112623 sw a7,12(sp) +800002d8: 01012823 sw a6,16(sp) +800002dc: 00d12a23 sw a3,20(sp) +800002e0: 00e12c23 sw a4,24(sp) +800002e4: 00f12e23 sw a5,28(sp) +800002e8: da5ff0ef jal 8000008c +800002ec: 02c12083 lw ra,44(sp) +800002f0: 00000513 li a0,0 +800002f4: 03010113 addi sp,sp,48 +800002f8: 00008067 ret diff --git a/riscv-app-gen/swap_bits/swapbits.c b/riscv-app-gen/swap_bits/swapbits.c new file mode 100644 index 0000000..89d21ab --- /dev/null +++ b/riscv-app-gen/swap_bits/swapbits.c @@ -0,0 +1,36 @@ +// C Program to swap bits +// in a given number + +// Fonte: https://www.geeksforgeeks.org/swap-bits-in-a-given-number/?ref=shm + +#include + + +/* Driver program to test above function*/ +int main() +{ + + + unsigned int x = 28; + unsigned int p1 = 0; + unsigned int p2 = 3; + unsigned int n = 2; + + /* Move all bits of first set to rightmost side */ + unsigned int set1 = (x >> p1) & ((1U << n) - 1); + + /* Move all bits of second set to rightmost side */ + unsigned int set2 = (x >> p2) & ((1U << n) - 1); + + /* XOR the two sets */ + unsigned int xor = (set1 ^ set2); + + /* Put the xor bits back to their original positions */ + xor = (xor << p1) | (xor << p2); + + /* XOR the 'xor' with the original number so that the + two sets are swapped */ + unsigned int result = x ^ xor; + + return 0; +} \ No newline at end of file diff --git a/riscv-app-gen/swap_bits/swapbits.elf b/riscv-app-gen/swap_bits/swapbits.elf new file mode 100755 index 0000000000000000000000000000000000000000..7669738171eb34ec29a71990cc99de75d73efc50 GIT binary patch literal 4696 zcmeHL%}&BV5S~IoOgvOQ84uP(6Yx+=ZAkE>!Ji8kpMVso*u=%AT@bz42lO?30OQev z&a}Hoh$P1IOfsFnZ>QVu*6-!Adu12~Xe+@7s4DZZdA3: +80000000: 00000513 li a0,0 +80000004: 00008067 ret diff --git a/tb/.DS_Store b/tb/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..f5cc8d95643ede6534f8756df763e0961acb15d5 GIT binary patch literal 6148 zcmeHK!AiqG5S?wSO({wb3OxqA7ObrlikDF94;aydN==%e!I+gMwTDv3S%1hc@q3)v z-H4^?MGz@7F#Bd_XLi}QVJ8a!VlWL302%;bp%RvA*nA;0PP!r`;~^Ak4ha(oVFVG3 zSEAYR9~q#t+lCB$Jhd@=K0go7atf(GOCSAM`WW}>KgLm-wcBr^RIY4nR;{X4x31kg zIdd~Fo2CPAa!I{2DPzB|J^wrkXQRf>u}m^AO2Uash=LG9t}db^kh6iDCPAulT|Hpc ztlFs2oXzAScb!#V$IbDcm;q+sR}9eoV51T`26K(->cED6A8EWo zNP;%KB?xVUj=@|bj-Uvgil|eCd145ij(*$3IRs8Rs!83-dw|YIXG6DjbBP zky~bf8CYhZth)`W|0mzS|Cf`v#|$t7YsG-54Bg=Xw`6MT%I2un+Nd|EBovox{76AV im12ygQrtvUf_|F}M8{yR5j`mUBcN#Dh8g%%2HpV!&`|jR literal 0 HcmV?d00001 diff --git a/tb/tb_core_icarus/.DS_Store b/tb/tb_core_icarus/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..d9e35c83d13bf2eb268f6331d00c285caef9153c GIT binary patch literal 6148 zcmeHK!A`i=T`6bW?5YYuYJvIkS-ix=a6GnvRbdEJ<*kXbbFRf@B_=^h2 z-VHFtk~_9Ueg9JKWyZZ+b9_ZyAZLF_-`?iMY?>ESa^=IhrVqc=*aMC^--fIl^ZiKo z#<%aa$aBtG;*oP^#FCsRj`%ETE6)en^*j;Rm6Dy|L9=CzY!|Kgk}H$1v%oVeY1E;s ztIywKP=jj}eLtGND^62Ss;qu`^W*2TKPP23VSi|8GkJg$3 zrog@eNB*%d=l{*m_y2v8J(&Wgz`s(!b;oz(5laeZYpXapYh(I7T} Date: Sun, 8 Dec 2024 17:01:06 -0300 Subject: [PATCH 05/12] Update README.md --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index df45970..8115403 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ -

Computer Organization and Architecture III

+

Computer Organization and Architecture III

+
This project is part of the Computer Organization and Architecture III (2024.2) course. The objective of the project was to implement a logical synthesis of [biRISC-V Core](http://github.com/ultraembedded/biriscv) using IBM 180 PDK and perform a Gate Level Simulation. @@ -99,4 +100,4 @@ You must have [riscv-gnu-toolchain](https://github.com/riscv-collab/riscv-gnu-to The linker script `riscv-app-gen/link.ld` was obtained from [Google's RISCV-DV](https://github.com/google/riscv-dv). -The entry point specified in the linker command is the main function, therefore, you must check the entry point address code with the comand `make info` e.g `make info ELF=main.elf`. This entry point is required to execute the testbench and need to be passed to the `reset_vector_i` input in `src/riscv_core.v` . \ No newline at end of file +The entry point specified in the linker command is the main function, therefore, you must check the entry point address code with the comand `make info` e.g `make info ELF=main.elf`. This entry point is required to execute the testbench and need to be passed to the `reset_vector_i` input in `src/riscv_core.v` . From 2847cface58637b1f7c298f22e2b862fe143c6b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pedro=20Buzatti=20Mendes?= Date: Sun, 8 Dec 2024 17:51:37 -0300 Subject: [PATCH 06/12] Adding gls image on README --- README.md | 9 ++++++++- docs/gls_sim_vision.png | Bin 0 -> 786935 bytes 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 docs/gls_sim_vision.png diff --git a/README.md b/README.md index 8115403..f7fb6a4 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ This project is part of the Computer Organization and Architecture III (2024.2) 1. [biRISC-V](#biriscv) 2. [Logic Synthesis](#logic-synthesis) 3. [Generating Applications](#generating-applications) -4. [Gate Level Simulation](#fourth-examplehttpwwwfourthexamplecom) +4. [Gate Level Simulation](#gate-level-simulation)
@@ -101,3 +101,10 @@ You must have [riscv-gnu-toolchain](https://github.com/riscv-collab/riscv-gnu-to The linker script `riscv-app-gen/link.ld` was obtained from [Google's RISCV-DV](https://github.com/google/riscv-dv). The entry point specified in the linker command is the main function, therefore, you must check the entry point address code with the comand `make info` e.g `make info ELF=main.elf`. This entry point is required to execute the testbench and need to be passed to the `reset_vector_i` input in `src/riscv_core.v` . + + +## Gate Level Simulation + +Post-synthesis Simulation using Cadence SimVision + +![Dual-Issue](docs/gls_sim_vision.png) \ No newline at end of file diff --git a/docs/gls_sim_vision.png b/docs/gls_sim_vision.png new file mode 100644 index 0000000000000000000000000000000000000000..541c5dc1a6bff9044311835811f303b2369220b8 GIT binary patch literal 786935 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